Spring Rest Controller - пустые и неправильные входные данные JSON - PullRequest
0 голосов
/ 09 декабря 2018

У меня есть контроллер Rest для регистрации пользователей (создание строки базы данных пользователя и профиля).Мне нужно защитить входные данные, чтобы не получать пустые {} и неправильные атрибуты JSON.

Мой контроллер выглядит следующим образом:

@RestController
@RequestMapping("/users")
public class UserController {

    private static final Logger LOG = LoggerFactory.getLogger(UserController.class);

    private final UserService userService;

    @Autowired
    public UserController(UserService userService) {
        this.userService = userService;
    }

    @RequestMapping(method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE)
    @ResponseStatus(HttpStatus.CREATED)
    public void register(@RequestBody User user) {
        try {
            userService.persist(user);
        } catch (TransactionSystemException e) {
            throw new PersistenceException(e.getOriginalException());
        }
    }
}

Когда я отправляю, например, {} или {"bad_data:420"}Он падает где-то, где я хэширую пароль, что далеко от того места, где его нужно остановить.

Как это сделать, чтобы генерировать исключение где-то перед преобразованием в объект или перед сохранением?

1 Ответ

0 голосов
/ 09 декабря 2018

Вы можете использовать API проверки bean для проверки ввода пользователя.
Он достаточно плавно интегрируется с Spring Controllers.

Итак, вот шаги:

1) Аннотируйте модель для проверки (User класс) с желаемыми ограничениями (@NotNull или @NotEmpty, например, для полей.
2) Добавьте аннотацию @Valid к параметру для проверки.
3) При необходимости добавьте параметр Error, чтобы зафиксировать ошибки.

Например:

Модель

import javax.validation.constraints.NotEmpty;

public class User {

   @NotEmpty
   private String userName;

   @NotEmpty
   private String password;

   // ...
}

Контроллер

import org.springframework.validation.Errors;
import javax.validation.Valid;

@RequestMapping(method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE)
@ResponseStatus(HttpStatus.CREATED)
public void register(@Valid @RequestBody User user, Errors errors) {

    if (errors.hasErrors()) {
      // error input processing here
    }

    try {
        userService.persist(user);
    } catch (TransactionSystemException e) {
        throw new PersistenceException(e.getOriginalException());
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...