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

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

你可能感兴趣的:(java基础,status-状态码,状态码,junit)