1. ホーム
  2. java

Spring MVCで、@ResponseBodyを使用する際にmime typeヘッダを設定する方法

2023-09-20 19:40:36

質問

私はJSON文字列を返すSpring MVCコントローラを持っており、私はmimetypeをapplication/jsonに設定したいと思います。どうすればよいでしょうか。

@RequestMapping(method=RequestMethod.GET, value="foo/bar")
@ResponseBody
public String fooBar(){
    return myService.getJson();
}

ビジネスオブジェクトはすでにJSON文字列として利用可能なので MappingJacksonJsonView は私にとっての解決策ではありません。 @ResponseBody は完璧ですが、どのようにmimetypeを設定することができますか?

どのように解決するのですか?

私は、JSON文字列ではなくドメインオブジェクトを返すようにサービスをリファクタリングし、Springにシリアライズを処理させることを考えます( MappingJacksonHttpMessageConverter を通して)シリアライズをSpringに任せることを考えます。Spring 3.1時点では、実装はかなりすっきりしているように見えます。

@RequestMapping(produces = MediaType.APPLICATION_JSON_VALUE, 
    method = RequestMethod.GET
    value = "/foo/bar")
@ResponseBody
public Bar fooBar(){
    return myService.getBar();
}

コメント

まず <mvc:annotation-driven /> または @EnableWebMvc が追加され をアプリケーションの設定に追加してください。

次に が生成する 属性は @RequestMapping アノテーションは、レスポンスのコンテンツタイプを指定するために使用されます。その結果、この属性は メディアタイプ.APPLICATION_JSON_VALUE (または "application/json" ).

最後に、JavaとJSON間のシリアライズとデシリアライズがSpringによって自動的に処理されるように、Jacksonを追加する必要があります(Jacksonの依存性はSpringによって検出され MappingJacksonHttpMessageConverter はフードの下にあることになります)。