我正在尝试开发一个API,它基本上可以返回国家的信息,所以我的url应该是这样的
http://myrestservice/country/US
因此,当请求带有有效国家/地区时,我的REST服务将准备该国家/地区的信息,准备名为countryInfo
的对象,并将其返回为
return ResponseEntity.status(200).body(countryInfo);
现在假设用户发送请求为http://myrestservice/country/XX。在这种情况下,由于XX不是有效的国家,我发送了响应。我在不同的地方阅读,其中大多数只解释了状态代码。我的问题是什么是最好的方式返回错误。
return ResponseEntity.status(404).body("Invalid Country");
return ResponseEntity.status(404).body(myobject);
//这里我的对象将是null
。
1.准备一个类,比如MyResponse.java
,如下所示。
public class MyResponse {
private String errorCode;
private String errorDescription;
private CountryInfo countryInfo
}
无论有无错误,都返回该对象,如果有错误,则将errorCode
和errorDescription
字段设置为合适的值,并将countryInfo
设置为空,如果没有错误,则将errorCode
和errorDescription
设置为空,并将countryInfo
设置为数据。
以上哪一个选项被认为是处理错误的标准方法。
3条答案
按热度按时间waxmsbnn1#
你确实应该返回一个404,但是你在身体里返回什么取决于你自己。
有些人只返回一个html响应,其中包含一些人类可读的信息,但是如果您希望API客户机获得更多有关404事件发生原因的信息,那么您可能还需要返回JSON。
您应该使用标准的
application/problem+json
,而不是使用您自己的格式,这是一种非常简单的格式:https://www.rfc-editor.org/rfc/rfc7807
s4n0splo2#
可以使用
@ControllerAdvice
来处理异常:您的端点需要识别错误并引发错误:
然后创建一个类来处理端点的异常:
在那里,您必须定义状态代码以指示用户生成了哪种类型的错误,409表示存在冲突。
此外,您还可以在其中定义一个包含更多信息的主体,可以是字符串,也可以是包含错误消息和描述的自定义对象,您可以通过文档向客户端提供这些信息。
zlhcx6iw3#
您可以使用Zalando Problem,它是一个实现application/problem+json的库。
https://github.com/zalando/problem
https://thecodingduck.blogspot.com/2023/01/best-practices-for-rest-api-design.html#standard_error