Rest API响应(异常/错误/默认)

时间:2018-10-09 07:41:40

标签: java rest api spring-boot

我想了解有关Rest API响应的以下案例的最佳实践。

第一个代码段

@GetMapping("/person/{id}")
public ResponseEntity<Person> postPersonDetails(@PathVariable("id) Long id) {
    Person person = personService.getPersonById(id);
    if (null == person) {
       throw new ResourceNotFoundException().withMessage("PERSON_NOT_FOUND");
    }
    return new ResponseEntity<Person>(person, HttpStatus.OK);
}

第二段代码

@GetMapping("/person/{id}")
public ResponseEntity<Person> postPersonDetails(@PathVariable("id) Long id) {
    Person person = personService.getPersonById(id);
    if (null == person) {
       return new ResponseEntity<Person>(null, HttpStatus.NotFound);
    }
    return new ResponseEntity<Person>(person, HttpStatus.OK);
}

问题是

  1. 哪个响应API用户(用户)错误消息更好?

  2. 抛出异常将错误消息保留在日志中。如果抛出异常更好,那我应该如何避免留下故意抛出异常的错误消息呢?

谢谢

1 个答案:

答案 0 :(得分:0)

在第一个示例中,我将考虑一种改进的方法:抛出PersonNotFoundException并添加一个异常处理程序,该异常处理程序将该特定异常转换为HTTP 404和有效负载中的适当错误消息。

例如:

@ExceptionHandler(PersonNotFoundException.class)
public ResponseEntity<Void> personNotFound()
{
    return new ResponseEntity<>(HttpStatus.NOT_FOUND);
}

这可将您的映射代码从异常到响应分开并可重复使用。