springboot控制接口返回的字段_SpringBoot实战:SpringBoot之Rest Full接口自定义返回数据类型(ResponseBodyAdvice)...

{

"success": 请求是否成功,

"message": 请求消息,

"data": 请求数据

}

那我们要如何实现呢,接下来将演示接口自定义返回数据类型

一般接口返回的数据格式的都是json,故现在pom.xml引入fastjson包

com.alibaba

fastjson

1.2.62

先建一个符合统一数据格式的实体类

import lombok.Getter;

import lombok.Setter;

import java.io.Serializable;

/**

* @author wusy

* Company: xxxxxx科技有限公司

* Createtime : 2020/2/28 22:11

* Description : rest full 统一返回包装类

*/

@Setter

@Getter

public class ResultObjectModel implements Serializable {

/**

* 返回是否成功

*/

private Boolean success;

/**

* 提示信息

*/

private String message;

/**

* 返回数据内容

*/

private T data;

public ResultObjectModel() {

}

public ResultObjectModel(Boolean success, String message, T data) {

this.success = success;

this.message = message;

this.data = data;

}

/**

* 返回成功

* @param data

* @param

* @return

*/

public static ResultObjectModel success(T data){

return new ResultObjectModel(true , "请求成功" , data);

}

/**

* 返回成功

* @param message

* @param data

* @param

* @return

*/

public static ResultObjectModel success(String message ,T data){

return new ResultObjectModel(true , message , data);

}

/**

* 失败

* @param message

* @return

*/

public static ResultObjectModel fail(String message){

return new ResultObjectModel(true , message , null);

}

/**

* 失败

* @param message

* @param data

* @param

* @return

*/

public static ResultObjectModel fail(String message ,T data){

return new ResultObjectModel(false , message , data);

}

}

然后修改Rest Full接口类

import com.alibaba.fastjson.JSONObject;

import com.wusy.demo.model.ResultObjectModel;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestMethod;

import org.springframework.web.bind.annotation.RestController;

/**

* @author wusy

* Company: xxxxxx科技有限公司

* Createtime : 2020/2/24 21:54

* Description :

*/

@RestController

@RequestMapping("/api/demo")

public class HelloWorldController {

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

public ResultObjectModel hello() {

JSONObject json = new JSONObject();

json.put("name", "wusy");

json.put("company" , "xxxxxx科技有限公司");

return ResultObjectModel.success(json);

}

}

运行应用,打开浏览器,在地址栏输入http://127.0.0.1:8787/api/demo/hello,观察结果

到这里我们实现了单个接口的数据统一返回,但是一般一个应用的接口都非常多,如果每一个接口都修改过去这显然是不合理的,伟大的Spring怎么会没有考虑到这些呢,SpringBoot提供了ResponseBodyAdvice供我们自定义返回数据格式。

import com.wusy.demo.model.ResultObjectModel;

import org.springframework.core.MethodParameter;

import org.springframework.http.MediaType;

import org.springframework.http.converter.HttpMessageConverter;

import org.springframework.http.server.ServerHttpRequest;

import org.springframework.http.server.ServerHttpResponse;

import org.springframework.web.bind.annotation.RestControllerAdvice;

import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;

/**

* @author wusy

* Company: xxxxxx科技有限公司

* Createtime : 2020/2/28 22:04

* Description : rest full 全局统一返回封装

*/

@RestControllerAdvice

public class GlobalControllerAdvice implements ResponseBodyAdvice {

/**

* 判断哪些需要拦截

* @param returnType

* @param converterType

* @return

*/

@Override

public boolean supports(MethodParameter returnType, Class extends HttpMessageConverter>> converterType) {

return true;

}

@Override

public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class extends HttpMessageConverter>> selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) {

//如果返回的数据是ResultObjectModel、Byte、String类型则不进行封装

if( body instanceof ResultObjectModel || body instanceof Byte || body instanceof String) {

return body;

}

return this.getWrapperResponse(request , body);

}

/**

* 返回正常的信息

* @param request

* @param data

* @return

*/

private ResultObjectModel getWrapperResponse(ServerHttpRequest request, Object data) {

return new ResultObjectModel<>(true, "请求成功" , data);

}

}

修改rest full接口类

import com.alibaba.fastjson.JSONObject;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestMethod;

import org.springframework.web.bind.annotation.RestController;

/**

* @author wusy

* Company: xxxxxx科技有限公司

* Createtime : 2020/2/24 21:54

* Description :

*/

@RestController

@RequestMapping("/api/demo")

public class HelloWorldController {

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

public JSONObject hello() {

JSONObject json = new JSONObject();

json.put("name", "wusy");

json.put("company" , "xxxxxx科技有限公司");

return json;

}

}

运行应用,打开浏览器,在地址栏输入http://127.0.0.1:8787/api/demo/hello,观察结果

通过对比前后请求结果可知,Rest Full接口自定义返回数据类型演示结束。

你可能感兴趣的:(springboot控制接口返回的字段_SpringBoot实战:SpringBoot之Rest Full接口自定义返回数据类型(ResponseBodyAdvice)...)