HttpMessageConverter
HttpMessageConverter 是一个Spring的重要的接口,它负责将请求信息转化为一个类型T,或者将对象T输出为响应信息。
RequestMappingHandlerAdapter 作为HandlerAdapter的组件实现类。HttpMessageConverter既由RequestMappingHandlerAdapter使用,将请求的信息转换为对象,或者将对象转化为响应信息。
使用HttpMessageConvert
- 使用@RequestBody / @ResponseBody 对方法进行标注
- 使用HttpEntity / ResponseEntity 作为方法的入参和返回值
@RestController
@RequestMapping("/upload")
public class FileUploadController{
@GetMapping("/getImg/{attachmentId}")
public byte [] getImg(@PathVariable String attachmentId) {
try {
byte [] buffer = fileService.getFileByte(attachmentId);
return buffer;
}catch (IOException e){
e.printStackTrace();
}
return null;
}
}
在使用@ResponseBody的时候,HttpMessageConvert会根据返回的类型来判断采用哪个HttpMessageConverter:
如果是一个对象类型一般会返回Json数据就会使用MappingJackson2HttpMessageConverter
如果是一个Byte[] 则根据规则查找ByteArrayHttpMessageConverter
处理xml的就是MarshallingHttpMessageConverter,熟悉Netty的同学应该知道Netty 内置了Mashalling的支持。
但是xml的数据格式比较臃肿。可以考虑使用更加紧凑的JSON,或者是protobuf 来进行序列化。