我在其他问题上看了很多,但我没有看到任何与我的问题相同的问题。
我正在重构遗留应用程序并实现Spring,我使用web.xml在WebSphere中运行Spring 4.
我的控制器使用@ResponseBody注释,当没有异常时,他们返回杰克逊处理的JSON罚款,但是如果有异常,则响应的主体不是JSON,因此,我无法很好地处理它们在我的前端Javascript。
例如,如果我在需要POST的端点上使用GET,我希望看到这样的JSON:
{
"timestamp": 1486410302434,
"status": 405,
"error": "Method Not Allowed",
"exception": "org.springframework.web.HttpRequestMethodNotSupportedException",
"message": "Request method 'GET' not supported",
"path": "/greeting"
}
但我得到了这个:
Error 405: Request method 'GET' not supported
如何在发生异常时配置环境以返回JSON?
这是我的网络配置:
@Configuration
@EnableWebMvc
@ComponentScan("hello")
public class WebConfig {
@Bean
public ViewResolver viewResolver() {
UrlBasedViewResolver resolver = new UrlBasedViewResolver();
resolver.setViewClass(org.springframework.web.servlet.view.JstlView.class);
resolver.setPrefix("/Pages");
resolver.setSuffix(".jsp");
return resolver;
}
我的web.xml:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/dispatcher-config.xml</param-value>
</context-param>
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/dispatcher-config.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
答案 0 :(得分:1)
Spring的HandlerExceptionResolvers执行异常映射。 This article和this article描述了处理异常的多种处理机制。
您可以实现自己的HandlerExceptionResolver并发送回您想要的数据。
如果您只需要一个例外,可以使用@ControllerAdvice
@ControllerAdvice
class GlobalControllerExceptionHandler {
@ResponseStatus(HttpStatus.NOT_ALLOWED) // 405
public void handleConflict() {
// Return whatever JSON you need
}
}
我不知道可以将错误输出更改为JSON的标志。