Spring的接口

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());
    }
}

猜你喜欢

转载自blog.csdn.net/wojiao228925661/article/details/82660261