功能
技术与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 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