Spring Boot @RestController динамически принимает @RequestBody объекта бина другой структуры и проверяет запрос - PullRequest
1 голос
/ 12 апреля 2019

В Spring Boot я пытаюсь создать @RestController, который должен принимать различную структуру @RequestBody и проверять компонент с помощью аннотации @Valid.

Я проверил несколько вариантов, таких как создание тела запроса String, Map и JSON структура, но в этих опциях я не могу использовать javax.validation.Valid аннотацию.

Моя схема тела запроса приведена ниже

Схема 1

{
  "type": "type1",
  "message": "String value"
}

Схема 2

{
  "type": "type2",
  "message": [
    {
      "key1": "value",
      "key2": "value"
    },
    {
      "key1": "value",
      "key2": "value"
    }
  ]
}

На основании ключа type в запросе ключ message содержит другое структурное значение. В ключе Схема 1 message значение String, а в ключе Схема 2 message значение List of Object

Я ищу лучший подход для обработки вышеуказанного сценария с включенной проверкой bean-компонента с @Valid аннотацией

Любая помощь будет принята с благодарностью. Спасибо!

Ответы [ 2 ]

0 голосов
/ 12 апреля 2019

Невозможно использовать реализацию по умолчанию с пружиной. Вы должны сделать это самостоятельно, создав собственный класс, который принимает оба типа объектов (String, List of Object), затем вы должны написать собственную аннотацию для проверки этого.

0 голосов
/ 12 апреля 2019

Вы можете сделать это на уровне бина.

как

@NotNull
@Size(min=2, max=30)
private String name;

см. Ссылки ниже

https://spring.io/guides/gs/validating-form-input/

https://www.baeldung.com/spring-boot-bean-validation

для переключения с одного компонента на другой вы можете использовать регистр переключения или добавить @Valid на уровне сервиса вместо уровня контроллера покоя (API) после получения типа компонента.

public methodName(@Valid ObjectName object){
.....
}

В компоненте, вы можете объявить

тип данных;

@ допустимое сообщение типа данных;

, затем вы сделаете то же самое в сообщении с именем bean.

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