여기에 몇 가지 대답 외에도 몇 가지 지침 (Spring 4.1)이 있습니다.
당신이 가진, 당신의 WebMvcConfig에 구성된 모든 messageconverters이없는 못했을 경우에 대비 ResponseEntity
하여 내부에서 @ResponseBody
잘 작동합니다.
당신이하는 경우, 즉 당신은 반환을 MappingJackson2HttpMessageConverter
사용하여 (나와 같이) 구성 ResponseEntity
했습니다 org.springframework.http.converter.HttpMessageNotWritableException
.
이 경우 작동하는 유일한 해결책은 다음과 같이 포장하는 것 byte[]
입니다 @ResponseBody
.
@RequestMapping(value = "/get/image/{id}", method=RequestMethod.GET, produces = MediaType.IMAGE_PNG_VALUE)
public @ResponseBody byte[] showImageOnId(@PathVariable("id") String id) {
byte[] b = whatEverMethodUsedToObtainBytes(id);
return b;
}
이 경우 다음 ByteArrayHttpMessageConverer
과 같이 WebMvcConfig에서 메시지 변환기를 올바르게 구성하고를 추가 하십시오.
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
converters.add(mappingJackson2HttpMessageConverter());
converters.add(byteArrayHttpMessageConverter());
}
@Bean
public MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter() {
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
converter.setObjectMapper(objectMapper);
return converter;
}
@Bean
public ByteArrayHttpMessageConverter byteArrayHttpMessageConverter() {
ByteArrayHttpMessageConverter arrayHttpMessageConverter = new ByteArrayHttpMessageConverter();
arrayHttpMessageConverter.setSupportedMediaTypes(getSupportedMediaTypes());
return arrayHttpMessageConverter;
}
private List<MediaType> getSupportedMediaTypes() {
List<MediaType> list = new ArrayList<MediaType>();
list.add(MediaType.IMAGE_JPEG);
list.add(MediaType.IMAGE_PNG);
list.add(MediaType.APPLICATION_OCTET_STREAM);
return list;
}