我正在开发Sping Boot 应用程序,以便为移动的应用程序开发REST API。
终点的示例包括:
1.当创建实体时-
@PostMapping("/new-user")
public ResponseEntity<SuccessResponse<UserDto>> createUser(
@Valid /* Enable validation */ @RequestBody UserDto userDto) {
UserDto createdUserDto = this.userService.createUser(userDto);
SuccessResponse<UserDto> successResponse = new SuccessResponse<>(AppConstants.SUCCESS_CODE,
AppConstants.SUCCESS_MESSAGE, createdUserDto);
return new ResponseEntity<>(successResponse, HttpStatus.OK);
}
在这种情况下的React是-
{
"data": {
"userId": 2,
"token": "eyJhbGciOiJIUzI1NiJ9.eyJzd3-WIiOiJheXVzaDIwYXBydwaWxAZ21haWwuY29tIiwiZXhwIjoxNjc4NzEyNjIyLCJpYXQiOjE2Nzg3MTI1NjJ9.xLNdJ4L4JjmnN3pkkp3gm3RrzLU6lBG2-mGLHn4f_Pg"
},
"status": "Success",
"code": "2000"
}
1.当异常发生时-
@ExceptionHandler(DuplicateResourceException.class) // add comma separated list of Exception classes
public ResponseEntity<ApiResponse> duplicateResourceFoundException(DuplicateResourceException ex) {
ApiResponse apiResponse = new ApiResponse(ex.getMessage(), AppConstants.ERROR_CODE, AppConstants.ERROR_MESSAGE);
return new ResponseEntity<ApiResponse>(apiResponse, HttpStatus.OK);
}
在这种情况下的React是-
{
"message": "2002",
"code": "Token is expired",
"status": "Error"
}
我的问题是
上面的API按预期工作,在两种情况下都给出带有状态代码200的响应。我添加了一个自定义状态代码作为API响应的一部分。
现在,我的问题是,提供自定义状态代码并在客户端检查它是否正确(如2000表示成功,2001表示失败,2002表示错误),或者我应该使用Http状态,如200表示成功,201表示已创建,404表示未在ResponseEntity中找到?
我想确保我遵循了正确的惯例。
1条答案
按热度按时间guykilcj1#
现在,我的问题是,提供自定义状态代码并在客户端检查它是否正确(如2000表示成功,2001表示失败,2002表示错误),或者我应该使用Http状态,如200表示成功,201表示已创建,404表示未在ResponseEntity中找到?
HTTP状态码是transfer-of-documents-over-a-network域的元数据,用于向通用HTTP组件(浏览器、代理等)传递响应消息的语义。
您几乎从来不希望在HTTP响应行中使用定制的状态代码-因为通用组件不知道它们的含义,因此会以某种通用方式解释它们(因此使用标准化代码不会获得太多优势)。
在响应体中使用定制的代码、消息、标识符是很好的。HTTP应用程序协议实际上并不太关心你在网络上传递的文档的语义。