正确处理Query Params的

时间:2017-01-30 19:49:28

标签: java spring spring-boot exception-handling

在Spring(Boot)应用程序中,我们大量使用Pageable接口,并且我们的控制器方法大多定义如下:

public ResponseEntity<List<Thing>> fetchAll(Pageable pageable) {
    Page things = this.thingService.findAll(pageable);
    return new ResponseEntity<>(things.getContent(), HttpStatus.OK);
}

通过以下端点访问时:

/api/things/?size=5&page=1&sort=name,asc

如果sort属性(在这种情况下为name)拼写错误或不存在,则抛出PropertyReferenceException并将500发回给用户,并显示以下消息:

{
  "timestamp": "2017-01-30 13:40:47",
  "status": 500,
  "error": "Internal Server Error",
  "exception": "org.springframework.data.mapping.PropertyReferenceException",
  "message": "No property name found for type Thing!",
  "path": "/api/things"
}

虽然这在技术上是正确的错误消息,但似乎500不是适当的代码来响应。 5xx级别的消息通常是为服务器问题保留的,这在技术上是用户问题,因此更像是4xx级别的消息。

最好我可以看到它是否只是一个400.我的问题是a)在这种情况下400是一个适当的反应和b)有一种优雅的方式来处理这个问题。我目前的解决方案是在我的ControllerAdvice类中捕获该异常并返回400。

0 个答案:

没有答案