gpt4 book ai didi

Spring 如何处理 Restful API 的 "Request method POST not supported"错误

转载 作者:行者123 更新时间:2023-12-01 00:52:17 24 4
gpt4 key购买 nike

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

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

这是我的 Controller :

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

}

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

这是我的 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>

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

最佳答案

您可以创建一个名为 DefaultExceptionHandler 的类。捕获任何异常并返回您想要的任何内容(例如:RestError 在此示例中)

@ControllerAdvice
public class DefaultExceptionHandler {
@ExceptionHandler(value = HttpRequestMethodNotSupportedException.class)
public ResponseEntity<?> methodNotSupportErrorHandler(HttpServletRequest req, Exception e) throws Exception {
RestError error = new RestError("BadRequestException", 400, "Method not supported");
return new ResponseEntity<RestError>(response, HttpStatus.BAD_REQUEST);
}
}


@JsonPropertyOrder(value = {"error_type", "code", "error_message"})
public class RestError {

@JsonProperty("code")
int code;

@JsonProperty("error_type")
String type;

@JsonProperty("error_message")
String message;

public RestError() {
super();
}

public RestError(String type, int code, String message) {
this.code = code;
this.type = type;
this.message = message;
}

public int getCode() {
return code;
}

public void setCode(int code) {
this.code = code;
}

public String getType() {
return type;
}

public void setType(String type) {
this.type = type;
}

public String getMessage() {
return message;
}

public void setMessage(String message) {
this.message = message;
}
}

更多关于如何在Spring MVC中处理异常,请阅读以下文章: Exception Handling in Spring MVC

关于Spring 如何处理 Restful API 的 "Request method POST not supported"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30448490/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com