#java #rest #spring-boot
#java #rest #spring-boot
Вопрос:
В 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
значение
Я ищу наилучший подход для обработки описанного выше сценария с включенной проверкой компонента с @Valid
помощью аннотации
Любая помощь будет высоко оценена. Спасибо!
Ответ №1:
вы можете сделать это на уровне компонента.
Нравится
@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 на уровне сервиса вместо уровня контроллера rest (API) после получения типа компонента.
public methodName(@Valid ObjectName object){
.....
}
В Bean вы можете объявить
тип типа данных;
@сообщение допустимого типа данных;
затем вы делаете то же самое в сообщении с именем bean.
Ответ №2:
Это невозможно с использованием реализации spring по умолчанию. Вы должны сделать это самостоятельно, создав пользовательский класс, который принимает объект обоих типов (строка, список объектов), затем вы должны написать свою собственную аннотацию для проверки этого.