最近我听说了一个bug。测试人员执行了以下请求:
curl -X 'GET' 'http://zones:26081/zones/vehicles-by-day?date=2023-05-20&page=0&size=10&sort=string'
500个错误的答案:
{"type":"about:blank","title":"Internal Server Error","status":500,"detail":"No property 'string' found for type 'VehiclesByDayEntity'","instance":"/zones/vehicles-by-day"}
但是她期望400的状态是合理的。如果org.springframework.data.domain.Pageable
无法解析,则应将其视为错误请求。
下面是@RestController
代码的摘录:
import org.springframework.data.domain.Pageable;
import org.springframework.data.web.PageableDefault;
...
@GetMapping(value = "/vehicles-by-day", produces = MediaType.APPLICATION_JSON_VALUE)
ResponseEntity<VehiclesByDay200Response> getVehiclesByDay(
@Parameter(name = "date", description = "The date vehicles by day which for")
@RequestParam(value = "date", required = false) LocalDate date,
@Parameter(name = "pageable", in = ParameterIn.QUERY)
@PageableDefault Pageable pageable
);
有没有一种方法可以检测(拦截)解析错误并返回400状态而不是500?
例如,如果我在请求中使用了一个错误的日期值,我将得到400。
curl -X 'GET' 'http://zones:26081/zones/vehicles-by-day?date=2023-05-aa&page=0&size=10'
{"type":"about:blank","title":"Bad Request","status":400,"detail":"Failed to convert 'null' with value: '2023-05-aa'","instance":"/zones/vehicles-by-day"}
为什么Pageable
不一样
1条答案
按热度按时间deyfvvtc1#
您可以实现自己的异常处理程序来完成此操作。抛出的异常是
PropertyReferenceException
。例如,你可以这样写:将其添加到您的控制器中,或者添加到用
@ControllerAdvice
注解的类中。