Spring如何处理Restful API的“不支持请求方法POST”错误

Nic*_*Eng 5 error-handling spring

我想处理像“不支持请求方法 POST/GET”这样的异常来响应 JSON 格式,而不是错误页面。

原因是 abc.com/api/ 之后的任何 url 都是我的 API url,但我不知道如何捕获和处理上述异常。

这是我的控制器:

@RequestMapping(value="/register", method=RequestMethod.POST)
    @ResponseBody
    public ApiBaseResp register(@RequestBody RegisterReq req , HttpServletResponse res) throws RestException {

}
Run Code Online (Sandbox Code Playgroud)

当我使用 GET 调用 abc.com/api/register 时,它会抛出错误页面,指出“不支持请求方法 GET”,这是正确的。但我想要一个更友好的 JSON 格式的错误处理程序,例如:

{
"code" : "99",
"message" : "Request MEthod GET not supported"
}
Run Code Online (Sandbox Code Playgroud)

这是我的 abc-servlet.xml:

<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerExceptionResolver"
        p:order="1" />

    <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver" p:order="2">
        <property name="exceptionMappings">
            <props>
                <prop
                    key="com.abc.framework.common.exception.NoPrivilegeException">noPrivilege</prop>
                <prop key="java.lang.Exception">error</prop>
                <prop
                    key="com.abc.framework.common.exception.CustomGenericException">customError</prop>

            </props>
        </property>
    </bean>
Run Code Online (Sandbox Code Playgroud)

我用谷歌搜索但似乎无法找到解决方案。也许我的关键字不正确。直接说到这里,希望有经验的人能解决我的问题。提前致谢。

RE3*_*350 0

我建议通过以下任一方式解决此问题。

  1. 创建一个,并通过此重写和方法interceptor传递请求,并且您可以根据您的选择准备响应。preHandlepostHandlepostHandle

  2. 或者您可以创建一个Filter,在那里您可以检查 HTTP 状态代码,然后修改response消息。