使用ResponseBodyAdvice对@ResponseBody响应体加密结果去掉双引号/添加响应头
上代码
配置类
/**
* 返回密文是字符串处理
*/
@Configuration
public class MappingJackson2HttpMessageConverterConfig {
@Bean
public MappingJackson2HttpMessageConverter getMappingJackson2HttpMessageConverter(){
return new MappingJackson2HttpMessageConverter(){
@Override
protected void writeInternal(Object object, Type type, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException {
if(object instanceof String){
Charset charset = this.getDefaultCharset();
StreamUtils.copy((String)object, charset, outputMessage.getBody());
}else{
super.writeInternal(object, type, outputMessage);
}
}
};
}
}
ResponseBodyAdvice
/**
* 返回加密处理
*/
@ControllerAdvice
public class EncryptionResponseBodyAdvice implements ResponseBodyAdvice<Object> {
@Override
public boolean supports(MethodParameter methodParameter, Class aClass) {
return methodParameter.getMethod().isAnnotationPresent(EncryptResponse.class);
}
@Override
public Object beforeBodyWrite(Object body, MethodParameter methodParameter, MediaType mediaType, Class aClass, ServerHttpRequest serverHttpRequest, ServerHttpResponse serverHttpResponse) {
return AESUtils.encrypt(JSONObject.toJSONString(body),"1212121212");
}
}
结果
ResponseBodyAdvice只对post并且方法上有requestbody的方法有效