リクエストを処理し、JSONにシリアル化されるBeanを返し、サービスで発生させることができるGET
例外ハンドラーを提供するコントローラーがあるとします。IllegalArgumentException
@RequestMapping(value = "/meta/{itemId}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public MetaInformation getMetaInformation(@PathVariable int itemId) {
return myService.getMetaInformation(itemId);
}
@ExceptionHandler(IllegalArgumentException.class)
@ResponseStatus(value = HttpStatus.BAD_REQUEST)
@ResponseBody
public String handleIllegalArgumentException(IllegalArgumentException ex) {
return ExceptionUtils.getStackTrace(ex);
}
メッセージコンバータは次のとおりです。
<mvc:annotation-driven>
<mvc:message-converters>
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter" />
<bean class="org.springframework.http.converter.StringHttpMessageConverter" />
</mvc:message-converters>
</mvc:annotation-driven>
ブラウザで指定されたURLをリクエストすると、正しいJSON応答が表示されます。ただし、例外が発生した場合、文字列化された例外もJSONに変換されますが、StringHttpMessageConverter
(結果text/plain
のmimeタイプ)によって処理されることを望んでいます。どうすればいいですか?
画像をより完全な(そして複雑な)ものにするために、次のハンドラーもあるとします。
@RequestMapping(value = "/version", method = RequestMethod.GET)
@ResponseBody
public String getApplicationVersion() {
return "1.0.12";
}
このハンドラーを使用すると、戻り文字列をクライアントから渡されたものに応じて、両方MappingJackson2HttpMessageConverter
でシリアル化できます。戻り値のタイプと値は次のようになります。StringHttpMessageConverter
Accept-type
+ ---- + --------------------- + ---------------------- -+ ------------------ + ----------------------------- -------- + | NN | URL | Accept-type | コンテンツタイプ| メッセージコンバーター| | | | リクエストヘッダー| 応答ヘッダー| | + ---- + --------------------- + ---------------------- -+ ------------------ + ----------------------------- -------- + | 1. | / version | text / html; * / * | テキスト/プレーン| StringHttpMessageConverter | | 2. | / version | アプリケーション/json; * / * | アプリケーション/json| MappingJackson2HttpMessageConverter | | 3. | / meta / 1 | text / html; * / * | アプリケーション/json| MappingJackson2HttpMessageConverter | | 4. | / meta / 1 | アプリケーション/json; * / * | アプリケーション/json| MappingJackson2HttpMessageConverter | | 5. | / meta / 0(例外)| text / html; * / * | テキスト/プレーン| StringHttpMessageConverter | | 6. | / meta / 0(例外)| アプリケーション/json; * / * | テキスト/プレーン| StringHttpMessageConverter | + ---- + --------------------- + ---------------------- -+ ------------------ + ----------------------------- -------- +