SpringBoot(五)ResponseBodyAdvice


你可能會有這樣的需求,對你的Controller返回值進行一個二次封裝,
如下:code是結果碼(1、成功,0、失敗,2、未登錄...),data為攜帶數據

{"code":"1","data":{"name":"xiaoming","age":"30"}}

 

因為SpringBoot默認的ResponseBody的處理程序就是HandlerMethodReturnValueHandler,所以我們自己寫的HandlerMethodReturnValueHandler通常無法生效,

非要使用HandlerMethodReturnValueHandler,那么只能替換掉默認的,

如果只是想對Controller的所有返回值進行封裝,產生上面的效果,使用ResponseBodyAdvice會更加簡單一些,下面幾行代碼就足夠了

 

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.ControllerAdvice;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;

import java.util.HashMap;
import java.util.Map;

/**
 * Created by 12614 on 2018/5/11.
 */
@ControllerAdvice
public class TestResponseAdvice implements ResponseBodyAdvice<Object>{
    @Override
    public boolean supports(MethodParameter methodParameter,
                            Class<? extends HttpMessageConverter<?>> aClass) {
        return methodParameter.hasMethodAnnotation(ResponseBody.class);
    }

    @Override
    public Object beforeBodyWrite(Object o, MethodParameter methodParameter,
                                  MediaType mediaType,
                                  Class<? extends HttpMessageConverter<?>> aClass,
                                  ServerHttpRequest serverHttpRequest,
                                  ServerHttpResponse serverHttpResponse) {
        Map<String,Object> res = new HashMap<>();
        res.put("code","1");
        res.put("data",o);
        return res;
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM