三种自定义SpringBoot返回的状态码

2019-10-07 21:09:22

参考地址 关于如何自定义SpringBoot返回的状态码

关于如何自定义SpringBoot返回的状态码

关于HttpStatus

在SpringBoot中关于状态码有一个枚举类型,如下。


public enum HttpStatus {

    CONTINUE(100, "Continue"),

    SWITCHING_PROTOCOLS(101, "Switching Protocols"),

    PROCESSING(102, "Processing"),

    CHECKPOINT(103, "Checkpoint"),

    OK(200, "OK"),

    ...

}

1

2

3

4

5

6

7

8

通过以下三种方法均可实现

1. 通过@ResponseStatus注解

eg:


@ResponseStatus(code=HttpStatus.INTERNAL_SERVER_ERROR,reason="server error")

public class ServerException extends Exception {

...

}

1

2

3

4

在全局异常捕捉的类中定义,可以自定义特定的异常来返回特定的状态码。


2. 修改response的status属性

eg:


@RequestMapping(value = "/index", method = RequestMethod.GET)

public void index(HttpServletResponse response) throws IOException{

    response.setStatus(500);

    response.getWriter().append("server error");

}

1

2

3

4

5

需要多加response参数,但这样的控制器都必须为void,有诸多限制。


3. ResponseEntity

eg:


@RequestMapping(value = "/user", method = RequestMethod.GET)

public ResponseEntity<Map<String,Object>> getUser() throws IOException{

    Map<String,Object> map = new HashMap<String,Object>();

    map.put("name", "user");

    return new ResponseEntity<Map<String,Object>>(map,HttpStatus.OK);

}

1

2

3

4

5

6

这样返回类型就只能是ResponseEntity。


前后端分离开发一般都会自定义返回的数据格式。

都会包含msg,code,data三个属性。

可用上述思路实现以下工具类。实现自定义返回的状态码,需将返回格式设置为以下类的格式,将返回数据传入data。


JSONResult.java

public class JSONResult<T> extends ResponseEntity<Message> {


    public JSONResult(HttpStatus status) {

        super(status);

    }


    public JSONResult(String code, String msg, T data) {

        super(Message.custom(code, msg, data), Message.num2HttpStatus(code));

    }


    public JSONResult(String code, String msg) {

        super(Message.custom(code, msg), Message.num2HttpStatus(code));

    }


    public static <T> JSONResult<T> success(T data) {

        return new JSONResult("200", "成功", data);

    }


    public static <T> JSONResult<T> failed(T data) {

        return new JSONResult("422", "失败", data);

    }


    public static <T> JSONResult<T> failMsg(String msg) {

        return new JSONResult("422", msg);

    }


    public static <T> JSONResult<T> custom(String code, String msg, T data) {

        return new JSONResult(code, msg, data);

    }

}


class Message<T> {


    String status;

    //向前端返回的内容

    String message;


    T data;


    public Message() {

    }


    public Message(String status, String message) {

        this.status = status;

        this.message = message;

    }


    public Message(String status, String message, T data) {

        this.data = data;

        this.status = status;

        this.message = message;

    }


    public static <T> Message<T> custom(String status, String message, T data) {

        return new Message(status, message, data);

    }


    public static <T> Message<T> custom(String status, String message) {

        return new Message(status, message);

    }


    public static HttpStatus num2HttpStatus(String code) {

        HttpStatus status = HttpStatus.NOT_FOUND;

        for (HttpStatus httpStatus : HttpStatus.values()) {

            boolean b = Integer.parseInt(code) == httpStatus.value();

            if (b) {

                return httpStatus;

            }

        }

        return status;

    }


    public String getStatus() {

        return status;

    }


    public void setStatus(String status) {

        this.status = status;

    }


    public String getMessage() {

        return message;

    }


    public void setMessage(String message) {

        this.message = message;

    }


    public T getData() {

        return data;

    }


    public void setData(T data) {

        this.data = data;

    }


}


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

通过继承ResponseEntity类来实现自定义返回类的自定义状态码返回。


  • 2021-02-04 14:08:13

    基于 Electron 的爬虫框架 Nightmare

    Electron 可以让你使用纯 JavaScript 调用 Chrome 丰富的原生的接口来创造桌面应用。你可以把它看作一个专注于桌面应用的 Node.js 的变体,而不是 Web 服务器。其基于浏览器的应用方式可以极方便的做各种响应式的交互,接下来介绍下关于 Electron 上衍生出的框架 Nightmare

  • 2021-02-04 20:13:02

    iOS framework制作及使用(包含xib和图片)

    静态库与动态库简介: 静态库:链接使用时完整地拷贝至可执行文件中 动态库:链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次 本文制作framework对应xcode版本:10.1

  • 2021-02-11 15:53:08

    node缓存框架memory-cache

    无论是在 desktop, mobile or web哪一方面,Cache都常被我们用来提升程序性能。当处理web应用程序的时候,虽然可以使用当前所有浏览器都支持的响应头来进行客户端缓存,从而提升页面加载效率。但当一个内容非常繁杂的页面需要2s来进行HTML输出的时候,即使启用客户端缓存该页面,服务器仍然需要针对每一个来访用户进行页面渲染。想想一个大型的新闻门户网站首页,难道他们要针对每一个用户一遍又一遍地处理HTML吗?

  • 2021-02-19 16:46:35

    window安装composer

    Composer 是 PHP 的一个依赖管理工具。它允许你申明项目所依赖的代码库,它会在你的项目中为你安装他们。

  • 2021-02-21 22:52:12

    php去除字符串中的HTML标签

    php自带的函数可以去除/删除字符串中的HTML标签/代码。 strip_tags(string,allow):函数剥去 HTML、XML 以及 PHP 的标签。 参数:string,必填,规定要检查的字符串;allow,选填,规定允许存在的标签,这些标签不会被删除。