Я создаю POJO из схемы json, используя jsonschema2pojo. Я хочу использовать материал проверки bean-компонентов jsr303/349. Я добавил необходимые элементы в путь к классам, добавил необходимые компоненты для запуска проверки, однако jsonschema2pojo не добавляет @org.springframework.validation.annotation.Validated
к сгенерированным классам, поэтому проверка не запускается, когда запрос поступает в мое приложение весенней загрузки.
Я смог убедиться, что мой валидатор настроен правильно, написав такой пустой класс и изменив тип @RequestBody
на новый тип:
@Validated
class SomeClass extends SomeGeneratedClass {
}
Когда я сделал это, проверка работает, как и ожидалось. Тем не менее, мы смотрим на десятки, если не на сотню или более этих объектов расширения, и наличие множества из них является воплощением сырого (IE, а не DRY) кода, и поэтому это далеко не идеальное решение.
Итак, мой вопрос: есть ли способ инициировать проверку bean-компонентов весной при входящем запросе, если рассматриваемый объект не аннотирован с помощью @Validated
? Обратите внимание, что jsonschema2pojo в настоящее время не имеет зависимости от Spring, и я считаю маловероятным, что автор примет запрос на вытягивание, который добавляет ее.
-- Напишите, если это полезно
Пример схемы JSON:
{
"type": "object",
"properties": {
"userIds": {
"type": "array",
"items": { "type": "string" },
"minSize": 1
}
},
"additionalProperties": false,
"required": ["userIds"]
}
Сгенерированный класс:
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({
"userIds"
})
public class ExampleSchema {
/**
*
* (Required)
*
*/
@JsonProperty("userIds")
@Valid
@NotNull
private List<String> userIds = new ArrayList<String>();
/**
*
* (Required)
*
*/
@JsonProperty("userIds")
public List<String> getUserIds() {
return userIds;
}
/**
*
* (Required)
*
*/
@JsonProperty("userIds")
public void setUserIds(List<String> userIds) {
this.userIds = userIds;
}
public ExampleSchema withUserIds(List<String> userIds) {
this.userIds = userIds;
return this;
}
@Override
public String toString() {
return ToStringBuilder.reflectionToString(this);
}
@Override
public int hashCode() {
return new HashCodeBuilder().append(userIds).toHashCode();
}
@Override
public boolean equals(Object other) {
if (other == this) {
return true;
}
if ((other instanceof ExampleSchema) == false) {
return false;
}
ExampleSchema rhs = ((ExampleSchema) other);
return new EqualsBuilder().append(userIds, rhs.userIds).isEquals();
}
}
Настройка bean-компонента проверки в моем WebConfig:
@Bean
public MethodValidationPostProcessor methodValidationPostProcessor(LocalValidatorFactoryBean validator) {
final MethodValidationPostProcessor methodValidationPostProcessor = new MethodValidationPostProcessor();
methodValidationPostProcessor.setValidator(validator);
return methodValidationPostProcessor;
}
@Bean
public LocalValidatorFactoryBean validator() {
return new LocalValidatorFactoryBean();
}
И мой метод контроллера:
@RequestMapping(value = "", method = RequestMethod.POST)
public void postExample(@RequestBody @Valid ExampleSchema example) {
//Perform actions on validated object
}
{}
- person StormeHawke   schedule 27.04.2017