1、HandlerMethodReturnValueHandler
这个类可以实现对放回数据的封装,可以看一下,也是@ResponseBody的原理,
如在springboot中使用:
1、实现HandlerMethodReturnValueHandler方法
package test.demo.handler;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.SerializerFeature;
import org.springframework.core.MethodParameter;
import org.springframework.web.context.request.NativeWebRequest;
import org.springframework.web.method.support.AsyncHandlerMethodReturnValueHandler;
import org.springframework.web.method.support.HandlerMethodReturnValueHandler;
import org.springframework.web.method.support.ModelAndViewContainer;
import test.demo.bean.Response;
import javax.servlet.http.HttpServletResponse;
import java.io.Serializable;
/**
* @author wangbin
*
* @date 2018.9.13
* @deprecated 这个类是吧返回结果封装一下,在放回json数据
* 这个里面需要实现HandlerMethodReturnValueHandler
*/
public class MyResult implements HandlerMethodReturnValueHandler ,AsyncHandlerMethodReturnValueHandler {
@Override
public boolean supportsReturnType(MethodParameter methodParameter) {
//这个地方返回true才会走到下面的方法(handleReturnValue)
return true;
}
@Override
public void handleReturnValue(Object o, MethodParameter methodParameter, ModelAndViewContainer modelAndViewContainer, NativeWebRequest nativeWebRequest) throws Exception {
modelAndViewContainer.setRequestHandled(true);
HttpServletResponse response=nativeWebRequest.getNativeResponse(HttpServletResponse.class);
response.setContentType("application/json;charset=utf-8");
Response response1=new Response();
response1.setCode(200);
response1.setMsg("ok");
response1.setData(o);
response.getWriter().write(JSON.toJSONString(response1,SerializerFeature.WriteMapNullValue));
}
@Override
public boolean isAsyncReturnValue(Object o, MethodParameter methodParameter) {
return supportsReturnType(methodParameter);
}
}
2、把他放到容器里面:
package test.demo.controller;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.method.support.HandlerMethodReturnValueHandler;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import test.demo.handler.MyResult;
import java.util.List;
@Configuration
public class GlobalCOnfig implements WebMvcConfigurer {
@Override
public void addReturnValueHandlers(List<HandlerMethodReturnValueHandler> handlers) {
handlers.add(new MyResult());
}
}