응용 프로그램에서 java.awt.BufferedImage 객체로 이미지를 제공하려고합니다.BufferedImage를 제공하는 동안 Spring MVC 내용 협상이 실패합니다.
- 하는 것은 허용 : 나는 GET을 수행 할 때, 여기에 결과입니다 이미지/JPEG 유효한 사진을 렌더링
- 수락 : */*는 HTTP 여기에 406
를 반환 관련되어 내 서블릿의 context.xml의 일부 :
@RequestMapping(value = "photo/{photoId:[0-9]+}", method = RequestMethod.GET, produces = MediaType.IMAGE_JPEG_VALUE)
@ResponseBody
public BufferedImage getPhoto(
@PathVariable long photoId) {
return photoService.getPhoto(photoId);
}
: 여기
<beans:bean id="messageAdapter"
class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<beans:property name="order" value="1" />
<beans:property name="messageConverters">
<beans:array>
<beans:bean class="org.springframework.http.converter.BufferedImageHttpMessageConverter"/>
</beans:array>
</beans:property>
</beans:bean>
그리고 내 컨트롤러입니다
MediaType.IMAGE_JPEG_VALUE은 (는) "image/jpeg"입니다. */*의 accept 헤더가 결코 HTTP 406을 생성하지 않는다는 것을 이해합니다. this page에 따르면 호출자가 해당 유형의 내용을 허용하지 않는다고 알려줍니다.
대부분의 브라우저는 수락 헤더에 "*/*"가 있고 사용자가 수락 헤더를 하드 코딩하지 않으면이 이미지를 볼 수 없기 때문에 이것은 문제입니다.
여기에 뭔가가 있습니까?
미리 감사드립니다.
흥미 진진한. 이 문제에 대한 명확한 설명이 있지만 응용 프로그램/json 데이터도 제공해야합니다. 내 예제에서는 그것을 포함하지 않았지만 MappingJacksonHttpMessageConverter도 사용합니다. 물론 그것이 다시 추가되었을 때 서블릿은 이미지를 직렬화하고 JSON을 반환하려고했습니다. 나는 내가 의도 한대로 BufferedImageHttpMessageConverter를 사용하려고 노력하고 있다고 생각한다. – Joe
또한이 문제를 해결하기 위해 추가하고 싶었습니다 (또는 아마도 해결책입니다). @ResponseBody의 바이트 배열에 원시 데이터를 넣고 image/jpeg를 지원하는 ByteArrayHttpMessageConverter를 포함 시켰습니다. 나는 누군가가 관심이있는 경우이를위한 출처를 포함 할 수 있습니다. – Joe