springmvc返回统一格式json数据

使用springmvc,所有接口返回统一格式的json数据

首先自定义返回json的注解

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface ResponseJsonBody {


}

支持ResponseJsonBody注解的返回值handler

public class ReponseJsonBodyMethodReturnValueHandler implements HandlerMethodReturnValueHandler {
private Logger logger = LoggerFactory.getLogger(getClass());


private List<HttpMessageConverter<?>> messageConverters = new ArrayList<HttpMessageConverter<?>>();


public boolean supportsReturnType(MethodParameter returnType) {
return returnType.getMethodAnnotation(ResponseJsonBody.class) != null;
}


public void setMessageConverters(List<HttpMessageConverter<?>> messageConverters) {
this.messageConverters.addAll(messageConverters);
}


@SuppressWarnings({ "resource", "unchecked" })
public void handleReturnValue(Object returnValue, MethodParameter returnType, ModelAndViewContainer mavContainer, NativeWebRequest webRequest) throws Exception {
mavContainer.setRequestHandled(true);
if (returnValue != null) {
HttpServletResponse response = webRequest.getNativeResponse(HttpServletResponse.class);
ServletServerHttpResponse outputMessage = new ServletServerHttpResponse(response);
Class<?> returnValueClass = returnValue.getClass();

for (HttpMessageConverter<?> messageConverter : messageConverters) {
if (messageConverter.canWrite(returnValueClass, MediaType.APPLICATION_JSON)) {
Object result = returnValue;
if (!(returnValue instanceof JsonResult)) {
result = JsonResultUtils.getJsonResult(returnValue, SystemConstants.RESPONSE_STATUS_SUCCESS, null, null);
}


((HttpMessageConverter<Object>) messageConverter).write(result, MediaType.APPLICATION_JSON, outputMessage);
if (logger.isDebugEnabled()) {
logger.debug("Written [" + returnValue + "] as \"" + MediaType.APPLICATION_JSON + "\" using [" + messageConverter + "]");
}


return;
}
}
}
}

public class CustomizeFastJsonHttpMessageConverter extends FastJsonHttpMessageConverter {
@Override
protected void writeInternal(Object obj, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException {
Object value = obj;
if (obj != null && !(obj instanceof JsonResult)) {
value = JsonResultUtils.getJsonResult(obj, SystemConstants.RESPONSE_STATUS_SUCCESS, null, null);
}

OutputStream out = outputMessage.getBody();
String text = JSON.toJSONString(value, getFeatures());
byte[] bytes = text.getBytes(getCharset());
out.write(bytes);
}
}

public final class JsonResultUtils {


public static <T> JsonResult<T> getJsonResult(T data, String code, String errorCode, String message) {
JsonResult<T> result = new JsonResult<T>();
result.setCode(code);
result.setErrorCode(errorCode);
result.setData(data);
result.setMessage(message);
result.setTimestamp(DateUtils.DateToStr(new Date()));

return result;
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值