обработка исключений привязки enum в загрузке Spring - PullRequest
0 голосов
/ 29 апреля 2018

У меня есть enum вроде как:

public enum Age {
    THREE("3"),
    FIVE("5");

    private final String value;

    Age(String value) {
        this.value = value;
    }

    public String getValue() {
    return value;
    }
}

и Пользователь class как:

public class User {

    @NotNull
    String name;

    Age age;

    public User() {
    }

    public User(@NotNull String name, Age age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Age getAge() {
        return age;
    }

    public void setAge(Age age) {
        this.age = age;
    }
}

и RestController как:

@ExceptionHandler(HttpMessageNotReadableException.class)
@ResponseStatus(HttpStatus.BAD_REQUEST)
public ResponseEntity<User> exceptionHandling(HttpMessageNotReadableException exception,
                                              HandlerMethod handlerMethod, WebRequest webRequest) {
    logger.error("error:" + exception.getLocalizedMessage());
    EnumValidationException ex = (EnumValidationException) exception.getMostSpecificCause();
    User user = new User();
    user.setName(""); // I want set user's input
    user.setAge(Age.FIVE);
    return ResponseEntity.ok(user);
}

@ExceptionHandler(MethodArgumentNotValidException.class)
public ResponseEntity<User> exceptionHandling2(MethodArgumentNotValidException exception) {
    logger.error("error:" + exception.getLocalizedMessage());
    User user = new User();
    user.setName(""); // I want set user's input
    user.setAge(Age.FIVE);
    return ResponseEntity.ok(user);
}

@PostMapping("/user2")
public String setUser2(@Valid @RequestBody User user) {
    return "ok";
}

Я сидел JSON как:

{
    "name":"Name",
    "age":"11"
}

Теперь, как я обрабатываю HttpMessageNotReadableException исключений, которые возвращают Name в name поле в response?

я должен изменить enum на static final String?

можно ли написать индивидуально Annotaion? как справиться со своим getValue()?

Примечание : я использую Hibernate.

1 Ответ

0 голосов
/ 29 апреля 2018

Если я понял ваш вопрос, вы хотите напечатать значение Age, а не имя: в этом случае вы можете попробовать переопределить toString() в Age:

@Override
public String toString() {
  return value;
}

Если вы хотите использовать getValue (), вам следует прочитать документацию по Spring Boot и особенно его базовый JSON API:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...