示例ResponseBodyAdvice :
@Order(1)
@ControllerAdvice
public class EncryptBodyAdvice implements ResponseBodyAdvice {
@Override
public boolean supports(MethodParameter returnType, Class converterType) {
return returnType.getMethod().isAnnotationPresent(EncryptBody.class);
}
@Override
public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType,
Class selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) {
if(body==null) return null;
EncryptBodyMethod encryptBodyMethod;
if(returnType.getMethod().isAnnotationPresent(EncryptBody.class)){
EncryptBody encryptBody = returnType.getMethodAnnotation(EncryptBody.class);
encryptBodyMethod = encryptBody.value();
}
response.getHeaders().setContentType(MediaType.TEXT_PLAIN);
String s = JSON.toJSONString(body);
return "3232312";
}
}
另外配置ConverterConfig也沒有用:
@Configuration
public class HttpConverterConfig extends WebMvcConfigurerAdapter {
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
converter.setSupportedMediaTypes(new LinkedList<MediaType>(){{
add(MediaType.TEXT_HTML);
add(MediaType.APPLICATION_JSON_UTF8);
}});
converters.add(new StringHttpMessageConverter());
converters.add(converter);
}
}
無論怎么樣,返回的結(jié)果都是
"3232312"
像上面這樣帶個雙引號,除非將控制器的返回值改成String就不會有了,請問有什么辦法解決嗎?
1 回答

MMTTMM
TA貢獻1869條經(jīng)驗 獲得超4個贊
已解決,重寫MappingJackson2HttpMessageConverter
的writeInternal
方法即可,完整配置如下:
@Configuration
public class HttpConverterConfig extends WebMvcConfigurerAdapter {
public MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter(){
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);
}
}
};
}
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
MappingJackson2HttpMessageConverter converter = mappingJackson2HttpMessageConverter();
converter.setSupportedMediaTypes(new LinkedList<MediaType>(){{
add(MediaType.TEXT_HTML);
add(MediaType.APPLICATION_JSON_UTF8);
}});
converters.add(new StringHttpMessageConverter());
converters.add(converter);
}
}
添加回答
舉報
0/150
提交
取消