java response 返回_java response通用返回

本文介绍了如何在Java中使用ResponseEntity实现接口统一返回,并通过GlobalResponseHandle类进行全局响应处理,避免每个方法都需要显式使用ResponseEntity,确保返回结构的一致性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

java response通用返回

编程语言

• Java

• 611次浏览

• 0次点赞

• 2019-04-25 12:42

场景

后台 接口统一返回 code、message、data

responseEntity

import com.maox.common.enums.ResponseEnums;

import lombok.Data;

/**

* ResponseEntity

*

* @author maoxian

* @since 2019-04-24 14:09

*/

@Data

public class ResponseEntity {

private String code;

private String msg;

private Object data;

private ResponseEntity(Object data) {

this.code = ResponseEnums.SUCCESS_OPTION.getCode();

this.msg = ResponseEnums.SUCCESS_OPTION.getMsg();

this.data = data;

}

private ResponseEntity(ResponseEnums responseEnums) {

this.code = responseEnums.getCode();

this.msg = responseEnums.getMsg();

}

private ResponseEntity(String code, String msg) {

this.code = code;

this.msg = msg;

}

public static ResponseEntity SUCCESS(Object data) {

return new ResponseEntity(data);

}

public static ResponseEntity ERROR(ResponseEnums responseEnums) {

return new ResponseEntity(responseEnums);

}

public static ResponseEntity ERROR(String code, String msg) {

return new ResponseEntity(code, msg);

}

}

方法调用

@GetMapping

@ApiOperation(value = "常用网站列表", notes = "常用网站列表")

public ResponseEntity list() {

return ResponseEntity.SUCCESS(this.tmWebsiteService.list(TmWebsiteVO.class));

}

ResponseEntity 为返回的 对象 这样的问题就是 每个方法都要写 ResponseEntity 如果有漏写则无法统一

解决办法

增加统一处理类 GlobalResponseHandle

import com.maox.common.ResponseEntity;

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.stereotype.Controller;

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

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

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

/**

* 统一处理handle

*

* @author maoxian

* @since 2019-04-24 15:12

*/

@RestControllerAdvice(annotations = {RestController.class, Controller.class})

public class GlobalResponseHandle implements ResponseBodyAdvice {

private final String responsePath = "com.maox.common.ResponseEntity";

private final String responseEntity = "org.springframework.http.ResponseEntity";

private final String voidPath = "void";

@Override

public boolean supports(MethodParameter methodParameter,

Class extends HttpMessageConverter>> aClass) {

// 如果地址 不是responsePath和responseEntity则需要走拦截

return !responsePath.equals(methodParameter.getParameterType().getName()) &&

!responseEntity.equals(methodParameter.getParameterType().getName());

}

@Override

public Object beforeBodyWrite(Object o, MethodParameter methodParameter, MediaType mediaType,

Class extends HttpMessageConverter>> aClass, ServerHttpRequest serverHttpRequest,

ServerHttpResponse serverHttpResponse) {

final String methodParameterName = methodParameter.getParameterType().getName();

// 根据各种情景返回结果集

if (voidPath.equals(methodParameterName)) {

return ResponseEntity.SUCCESS(null);

}

if (!mediaType.includes(MediaType.APPLICATION_JSON)) {

return o;

}

if (responsePath.equals(methodParameterName)) {

return o;

}

// 用ResponseEntity.SUCCESS包含返回结果

return ResponseEntity.SUCCESS(o);

}

}

应用

修改 第一个 的 list 方法

@GetMapping

@ApiOperation(value = "常用网站列表", notes = "常用网站列表")

public List list() {

return this.tmWebsiteService.list(TmWebsiteVO.class);

}

返回结构一致 修改成功 这样 就不需要强制写 responseEntity 并且吧所有的返回都包在了 返回体了

再也不用担心熊孩子瞎传值了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值