一.使用場景-參數轉發
1.springMVC 中使用註解@ResponseBody 響應接口返回數據;
2.大批量接口需要對請求參數做同個或相似處理,,比如對接收參數做解密之類;
二.實現
實現 ResponseBodyAdvice<T> 接口,重寫beforeBodyWrite函數;
三.demo
加密
@Component
@ControllerAdvice(basePackages = "xxx.controller")
public class EncryptResponseBody<T> implements ResponseBodyAdvice<T> {
@Override
public boolean supports(MethodParameter returnType, Class<? extends HttpMessageConverter<?>> converterType) {
return returnType.getMethodAnnotation(ResponseBody.class) != null;
}
@SuppressWarnings("unchecked")
@Override
public T beforeBodyWrite(T body, MethodParameter returnType, MediaType selectedContentType, Class<? extends HttpMessageConverter<?>> selectedConverterType, ServerHttpRequest request,
ServerHttpResponse response) {
// 提取響應數據
Map<String, Object> respdata = (Map) body;
// Object 實際接口中響應返回的對象類型
Object resp = (Object) respdata.get("Object");
if (resp.getData() != null) {
byte[] reqdata = null;
ObjectMapper mapper = new ObjectMapper();
try {
String jsonData = mapper.writeValueAsString(resp.getData());
reqdata = jsonData.getBytes("utf-8");
}
catch (JsonProcessingException | UnsupportedEncodingException e) {
throw new IllegalStateException("json轉換失敗");
}
// TODO 處理數據 例:resp.setXXXX();
}
return (T) respdata;
}
}