如何处理 REST 服务中的错误请求

问题描述

我有一个休息服务,它接收这样的对象:

public class Item implements Serializable{
    
    private static final long serialVersionUID = 1L;
    
    @Id
    private String ID;
    private String name;
    @JsonFormat(shape = JsonFormat.Shape.STRING,pattern = "yyyy-MM-dd")
    private Date insertDate;
    //getter setter
}

我的控制器有一个这种类型的 saveItem 方法

@RequestMapping(value = "/item",method = RequestMethod.POST,produces = "application/json")
public Object saveItem(@RequestBody(required = false) Item item) {
    if (item == null) {
      return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
    }
 //code..
    return new ResponseEntity<>(HttpStatus.OK);
}

当不正确的日期格式到达时,会产生一个我没有处理的错误,因为它没有输入if。为什么会发生这种情况?应该如何管理? 即使没有@JsonFormat 注解也出现问题

解决方法

我想您正在使用弹簧靴。您可以使用 ControllerAdvice 来定义异常情况下的响应。您可以将多个处理程序定义为使用 ExceptionHandler 注释的多个方法。

@Slf4j
@ControllerAdvice
public class RestControllerAdvice {

  @ExceptionHandler(InvalidArgumentException.class)
  public ResponseEntity<ResponseDto<Object>> handleException(Exception exception) {
    log.error(exception.getMessage(),exception);
    return new ResponseEntity<>(<someBody>,HttpStatus. BAD_REQUEST);
  }

  @ExceptionHandler(Exception.class)
  public ResponseEntity<ResponseDto<Object>> handleException2(Exception exception) {
    log.error(exception.getMessage(),HttpStatus. INTERNAL_SERVER_ERROR);
  }
}