Добавление динамической проверки на стороне сервера при весенней загрузке - PullRequest
0 голосов
/ 19 сентября 2018

Я использую Spring Boot 2. Я хочу добавить некоторые динамические проверки на стороне сервера, которые должны выполняться при вызове POST REST.Можно ли добавить эти проверки в форме аннотаций на уровне параметров вызова метода POST?

Ответы [ 2 ]

0 голосов
/ 19 сентября 2018

Вот как можно добиться определения валидации в RequestBody, которую вы получаете со стороны клиента.

  1. Определите ваш POJO, который вы получите со стороны клиента.

     public class Employee implements Serializable {
    
      private Long id;
    
      @NotNull(message = "Name should not be null")
      @NotBlank(message = "Name should be not empty")
      @Size(min = 1, max = 255, message = "Name allowed max 255 characters")
      private String name;
    

Теперь в вашем контроллере используйте @Valid аннотацию для @RequestBody, как показано ниже.

public ResponseEntity<?> createEmployee(@Valid @RequestBody Employee employee)
0 голосов
/ 19 сентября 2018

Приведенный ниже код поможет вам выполнить проверку на стороне сервера.

Класс Pojo:

public class Data {
    @NotNull
    private final String someStringValue;
    @Min(1)
    private final int someIntValue;

    @JsonCreator
    public Data(@JsonProperty("someStringValue") String someStringValue, @JsonProperty("someIntValue") int someIntValue) {
        this.someStringValue = someStringValue;
        this.someIntValue = someIntValue;
    }

    public String getSomeStringValue() {
        return someStringValue;
    }

    public int getSomeIntValue() {
        return someIntValue;
    }

Для проверки нам нужен собственный класс, содержащий логику:

@Component
public class StringValueValidator {

    public void validate(String language, Data data, Errors errors) {
        if (!"de-DE".equals(language)) {
            if (data.getSomeStringValue().length() > 140) {
                errors.reject("someStringValue");
            }
        }
    }
}

метод управления:

@RequestMapping(value = "/validation", method = RequestMethod.POST)
    public ResponseEntity<?> acceptData(@Valid @RequestBody Data data, Errors errors, 
        @RequestHeader(HttpHeaders.ACCEPT_LANGUAGE) String language) {
        stringValueValidator.validate(language, data, errors);
        if (errors.hasErrors()) {
            return new ResponseEntity<>(createErrorString(errors), HttpStatus.BAD_REQUEST);
        }
        return new ResponseEntity<>(HttpStatus.OK);
    }

См. Это: https://blog.codecentric.de/en/2017/11/dynamic-validation-spring-boot-validation/

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