您的位置:首页 > 编程语言 > Java开发

java实现json格式的状态码数据

2017-08-28 16:05 337 查看
功能

技术与IDE

代码参考github

代码片段
创建状态码的类 StatusCode

创建返回json格式的类 JsonResult

编写登陆页面的类 LoginController

编写启动程序JsonStatusApplication

浏览器中访问url

返回结果

如果不创建JsonResult会是什么效果
代码块修改LoginControllerjava

提高代码的质量
思路1 直接创建变量2 创建类枚举

Junit测试类

功能

编写一个返回格式是json格式的数据,并且此数据是状态码的数据。例如:

{“code”:200,”message”:”成功”,”date”:1504785964984}

技术与IDE

spring boot

IntelliJ IDEA

代码参考github:

Json-Status

代码片段

1. 创建状态码的类 – StatusCode

StatusCode .java

package com.yubai.jsonstatus.model;

/**
* 功能:输出的json字段的值是StatusCode类决定
*      就是说返回状态的值是成功200还是失败400还是错误404,这些值
*      是StatusCode这个类定义的。
*/
public enum StatusCode {
/** 成功 */
SUCCESS(200, "成功"),

/** 没有登录 */
NOT_LOGIN(400, "没有登录"),

/** 发生异常 */
EXCEPTION(401, "发生异常"),

/** 系统错误 */
SYS_ERROR(402, "系统错误"),

/** 参数错误 */
PARAMS_ERROR(403, "参数错误 "),

/** 不支持或已经废弃 */
NOT_SUPPORTED(410, "不支持或已经废弃"),

/** AuthCode错误 */
INVALID_AUTHCODE(444, "无效的AuthCode"),

/** 太频繁的调用 */
TOO_FREQUENT(445, "太频繁的调用"),

/** 未知的错误 */
UNKNOWN_ERROR(499, "未知错误");

private int code;
private String message;

StatusCode(int code, String message) {
this.code = code;
this.message = message;
}

public int getCode() {
return code;
}

public void setCode(int code) {
this.code = code;
}

public String getMessage() {
return message;
}

public void setMessage(String message) {
this.message = message;
}
}


2. 创建返回json格式的类 – JsonResult

package com.yubai.swaggerrestfulapi;
/**
* 这个类定义了返回的json格式,即json含有哪些字段
*/
public class JsonResult {
private String code;
private String message;
private Object data;

public JsonResult(String code, String message, Object data) {
this.code = code;
this.message = message;
this.data = data;
}

public String getCode() {
return code;
}

public String getMessage() {
return message;
}

public Object getData() {
return data;
}
}


3. 编写登陆页面的类 – LoginController

AdminController .java

package com.yubai.jsonstatus.controller;

import com.yubai.jsonstatus.model.JsonResult;
import com.yubai.jsonstatus.model.StatusCode;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Date;
import java.util.Map;

/**
* 功能: 这是决定url的路劲,和判断是否可以登陆成功的逻辑
*/
@RestController
@RequestMapping(value = "/login")
public class LoginController {
private String username = "admin";
private String password = "123";

/**
* @apiNote login
* @param maps 保存username password
* @return JsonResult
*/
@RequestMapping(value = "")
public JsonResult login(HttpServletRequest request, HttpServletResponse response, @RequestParam Map<Integer, String> maps) {
if (maps.get("username").equals(username) && maps.get("password").equals(password)) {
return new JsonResult(StatusCode.SUCCESS.getCode(), StatusCode.SUCCESS.getMessage(), new Date());
} else {
return new JsonResult(StatusCode.NOT_LOGIN.getCode(), StatusCode.NOT_LOGIN.getMessage(), new Date());
}
}
}


4. 编写启动程序JsonStatusApplication

package com.yubai.swaggerrestfulapi;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class JsonStatusApplication{

public static void main(String[] args) {
SpringApplication.run(SwaggerRestfulApiApplication.class, args);
}
}


浏览器中访问url:

http://localhost:8082/api/admin/login?username=admin&password=123

返回结果:



如果不创建JsonResult会是什么效果

代码块(修改LoginController.java)

LoginController .java

package com.yubai.jsonstatus.controller;

import com.yubai.jsonstatus.model.JsonResult;
import com.yubai.jsonstatus.model.StatusCode;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Date;
import java.util.Map;

/**
* 功能: 这是决定url的路劲,和判断是否可以登陆成功的逻辑
*/
@RestController
@RequestMapping(value = "/login")
public class LoginController {
private String username = "admin";
private String password = "123";

/**
* @param maps 保存username password
* @return JsonResult
* @apiNote login
*/
@RequestMapping(value = "")
public JsonResult login() {
if ("admin".equals(username) && "123".equals(password)) {
return new JsonResult(200, "成功", new Date());
} else {
return new JsonResult(400, "失败", new Date());
}
}
}


比较创建JsonResult,会更灵活,扩展性更好。

因为当我们想要修改返回的code200/404/400或者message成功/失败信息时,需要修改多处使用到的地方。而我们定义JsonResult后,只需要在一个地方修改就可以修改所有的值

提高代码的质量

建议我们的代码具有灵活性,不要写固定的代码。

就是说能用变量代替的不要用常量

思路:1. 直接创建变量,2. 创建类/枚举…

第一种直接创建变量

example:

需求: 在20个文件中使用System.out.println(“我是白玉”); 当需求改变,修改我是白玉为“我是赵雅芝”,此时有两种方法解决

方法一: 把20个文件中的我是白玉逐一修改成我是赵雅芝。

方法二: 定义变量String name = “我是白玉”,在20个文件中使用,当需要修改name的值时,直接修改name = ”我是赵雅芝“

两种方法比较: 显然第二种方法灵活性更好,只需要改动一个地方就可以改变所有使用的地方。第一种显然比较笨拙,不建议采用

第二种直接创建类/枚举…

本例的JsonResult代替写成固定的code200和message成功。显然创建JsonResult这个枚举更灵活。

Junit测试类

详情请见代码参考github
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 状态机