私のアプリケーションでjava.awt.BufferedImageオブジェクトとしてイメージを提供しようとしています。私はGETを実行しようとすると、ここでの結果は以下のとおりです。BufferedImageの提供中にSpring MVCコンテンツネゴシエーションが失敗する
- は受け入れ:画像/ jpegのが有効な画像をレンダリングする
- は受け入れ:*/* HTTP 406
を返すここで関連があります私のサーブレットのcontext.xmlの一部:
<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>
そして、ここでは私のコントローラである:
@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);
}
MediaType.IMAGE_JPEG_VALUEは「image/jpeg」です。 */*の受け入れヘッダがHTTP 406を生成しないことは私の理解である。によれば、呼び出し元はそのタイプのコンテンツを受け付けないことがわかる。
ほとんどのブラウザでは、受け入れヘッダーに「*/*」が付いているため、ユーザーが受け入れヘッダーをハードコードしない限り、このイメージを表示できないため、問題です。
ここに何か不足していますか?
ありがとうございます。
興味深いことに、これは間違いなく問題を明らかにしますが、私のアプリケーションもアプリケーション/ jsonデータを提供する必要があります。私は私の例ではそれを含めませんでしたが、MappingJacksonHttpMessageConverterも使用しています。これが当然追加されたとき、サーブレットはイメージをシリアル化してJSONを返そうとしました。私がしようとしているのは、BufferedImageHttpMessageConverterを意図どおりに使うことだと思います。 – Joe
また、これを回避するためにこれを追加したかったのですか(これは解決策かもしれません)。@ResponseBodyのバイト配列に生データを入れ、image/jpegをサポートするByteArrayHttpMessageConverterを含めました。誰かが興味を持っているなら、私はこれのソースを含めることができます。 – Joe