html(リクエストがhtmlページの場合)またはjson(REST API呼び出しの場合)を返すことができるSpring用のサーブレット例外ハンドラーを作成しようとしています。HandlebarsViewResolver を構成したため、html 部分はうまく機能します。したがって、以下のコードの「else」部分は exception.hbs を検索し、うまく機能します。しかし、MappingJacksonJsonView を設定しようとすると、Spring は MappingJacksonJsonView.hbs を見つけようとし、実際には MappingJacksonJsonView を使用して POJO (jsonErrorObject) を json に変換して返しません。
誰かが私を助けて、MappingJacksonJsonViewを介してhandlerbarsビューまたはjsonを返すことができるこの一般的な例外ハンドラーを機能させる方法を教えてもらえますか?
Java コード
@ExceptionHandler(Exception.class)
@ResponseStatus (value = HttpStatus.INTERNAL_SERVER_ERROR)
public ModelAndView handleAnyException(Exception e, HttpServletRequest request) {
ModelAndView mav = new ModelAndView();
if (request.getHeader("Accept").contains("application/json")) {
mav.setViewName("myJSON", "result", jsonErrorObject);
} else {
mav.setViewName("exception");
mav.addObject("exceptionMessage", jsonErrorObject.getResDescr());
}
return mav;
}
サーブレット.xml
<bean id="hbsViewResolver" class="com.github.jknack.handlebars.springmvc.HandlebarsViewResolver">
<property name="prefix" value="/WEB-INF/hbs/" />
<property name="suffix" value=".hbs" />
<property name="order" value="1" />
</bean>
<bean name="myvr" class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
<property name="mediaTypes">
<map>
<entry key="json" value="application/json" />
<entry key="html" value="text/html" />
</map>
</property>
<property name="viewResolvers">
<list>
<ref local="hbsViewResolver" />
</list>
</property>
<property name="defaultViews">
<list>
<bean name="myJSON" class="org.springframework.web.servlet.view.json.MappingJacksonJsonView" />
</list>
</property>
</bean>