Spring缺少查询参数异常处理
我有以下代码:Spring缺少查询参数异常处理,spring,spring-boot,Spring,Spring Boot,我有以下代码: @GetMapping(value = "/users/{id}") @ResponseStatus(HttpStatus.OK) public DtoUser getUserById( @PathParam("id") @PathVariable("id") @RequestParam Long id) { return adminService.getUserById(id); } @ControllerAdvice public class GlobalExce
@GetMapping(value = "/users/{id}")
@ResponseStatus(HttpStatus.OK)
public DtoUser getUserById( @PathParam("id") @PathVariable("id") @RequestParam Long id) {
return adminService.getUserById(id);
}
@ControllerAdvice
public class GlobalExceptionHandler extends ResponseEntityExceptionHandler {
@Override
public ResponseEntity<Object> handleHttpMessageNotReadable(
HttpMessageNotReadableException ex, HttpHeaders headers, HttpStatus status, WebRequest request) {
return error_with_my_info;
}
@Override
protected ResponseEntity<Object> handleMissingServletRequestParameter(
MissingServletRequestParameterException ex, HttpHeaders headers,
HttpStatus status, WebRequest request) {{
return error_with_my_info;
}
...
}
该代码:
@GetMapping(value = "/users/{id}")
@ResponseStatus(HttpStatus.OK)
public DtoUser getUserById( @PathParam("id") @PathVariable("id") @RequestParam Long id) {
return adminService.getUserById(id);
}
@ControllerAdvice
public class GlobalExceptionHandler extends ResponseEntityExceptionHandler {
@Override
public ResponseEntity<Object> handleHttpMessageNotReadable(
HttpMessageNotReadableException ex, HttpHeaders headers, HttpStatus status, WebRequest request) {
return error_with_my_info;
}
@Override
protected ResponseEntity<Object> handleMissingServletRequestParameter(
MissingServletRequestParameterException ex, HttpHeaders headers,
HttpStatus status, WebRequest request) {{
return error_with_my_info;
}
...
}
@ControllerAdvice
公共类GlobalExceptionHandler扩展了ResponseEntityExceptionHandler{
@凌驾
公共响应可处理的消息(
HttpMessageNodeReadableException ex、HttpHeaders标头、HttpStatus状态、WebRequest请求){
返回错误\u和\u我的\u信息;
}
@凌驾
受保护的ResponseEntity handleMissingServletRequestParameter(
缺少ServletRequestParameterException ex、HttpHeaders、,
HttpStatus状态,WebRequest请求){{
返回错误\u和\u我的\u信息;
}
...
}
问题是,当我发送一个没有参数的请求时,调用的是HandleHttpMessageNodeable,而不是handleMissingServletRequestParameter。
为什么呢?
其他API端点是否会影响此行为,例如具有相同端点的PUT请求处理程序?
如何使处理MissingServletRequestParameter?即兴制作:
@GetMapping(value = "/users")
@ResponseStatus(HttpStatus.OK)
public DtoUser getUserById( @RequestParam(value="id" , required=true)Long id) {
return adminService.getUserById(id);
}
localhost:8080?id=test
现在,如果您不传递id,它将给您handleMissingServletRequestParameter。为什么有
@PathParam(“id”)
@PathVariable(“id”)
@RequestParam
,您不需要这三个参数。PathParam和PathVariable基本相同。请求参数用于请求参数。这可能是您的问题。PathParam用于路径中的参数。(foo部分是参数)。RequestParam用于请求参数