java 当Spring中的@ReuqestBody给出了不正确的枚举时,如何处理异常

sdnqo3pr  于 2023-02-07  发布在  Java
关注(0)|答案(1)|浏览(166)

我想在@RequestBody中接收枚举。当枚举的正确值输入到@RequestBody时,它工作得很好。但是,当给出一个不正确的值时,它给我错误状态400。
我想处理当一个错误的枚举值被给定时的异常。我做了一些研究,有些人说我可以通过像这样实现它来处理这些异常。

@Component
public class EventTypeConverter implements Converter<String, EventType> {
    @Override
    public EventType convert(String s) {
        return EventType.valueOf(s.toUpperCase());
    }
}

但是,这并没有改变什么。
我知道我可以做类似的事情,通过接收一个String,然后转换它,并从这里处理异常。但我想知道我是通过使用@ ExceptionHandlder(我认为这会变得非常简单和干净)还是其他任何干净和简单的方法来处理枚举转换异常。

public enum EvenType {
    // enums...

    @Getter
    Character type;

    EvenType(Character type) {
        this.type = type;
    }

    public static EvenType of(String eventType) {
        return EvenType.valueOf(eventType);
    }

}
flvlnr44

flvlnr441#

你的例子没有提供你想要如何处理异常的确切信息,但是一般来说,如果你认为它更简洁,你可以像这样使用ExceptionHandler(使用int的简化例子)。

@GetMapping("checkNumber/{longValue}")
public ResponseEntity<Integer> checkNumber(@PathVariable int longValue) {
  return ResponseEntity.ok(longValue);
}

现在,如果您提供的值无法示例化为Integer句柄,则如下所示:

@ExceptionHandler(NumberFormatException.class)
public ResponseEntity<Integer> handleNumberFormatException(final NumberFormatException nfe) {
  // Do what ever needs to be done and maybe call the controller method again.
  return checkNumber(Integer.MAX_VALUE);
}

这并不是说这是最好的选择,也不是说你应该使用它,这主要取决于当异常发生时你实际上想实现什么。

相关问题