我尝试对可以用表示的数据对象进行验证 json
下一步:
{
"id": "string",
"mail": "mail@ukr.net",
"map": {
"additionalProp1": "string",
"additionalProp2": "string",
"additionalProp3": "string"
},
"name": "string",
"secondLevel": {
"id": "string",
"mail": "mail2@ukr.net",
"phone": "string"
}
}
``` `org.springframework.boot:spring-boot-starter-validation` 为我提供了很多现成的解决方案。为我应用的特定消息进行一些配置 `messages.properties` 并补充道
@Bean
public MessageSource messageSource() {
ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
messageSource.setBasename("classpath:messages");
messageSource.setDefaultEncoding("UTF-8");
return messageSource;
}
@Bean
public LocalValidatorFactoryBean validator(MessageSource messageSource) {
LocalValidatorFactoryBean bean = new LocalValidatorFactoryBean();
bean.setValidationMessageSource(messageSource);
return bean;
}
此解决方案适用于扩展jsr-303的spring注解。所以消息从属性文件加载并由代码检测。
下一步是用 `map` 字段验证(它可以有不同的属性。根据标识符的不同,规则也可能不同。非常普遍 `validator` 因此:
import org.springframework.validation.Validator;
@Component
public class FirstLevelValidator implements Validator {
@Override
public boolean supports(Class<?> clazz) {
return FirstLevel.class.equals(clazz);
}
@Override
public void validate(Object target, Errors errors) {
FirstLevel first = (FirstLevel) target;
@NotNull Map<String, String> map = first.getMap();
if (map != null) {
if (!map.containsKey("key1")) {
errors.rejectValue("map", "mandatory.parameter", "\"key1\" field is required.");
}
if (!map.containsKey("key2")) {
errors.rejectValue("map", "{mandatory.parameter2}");
}
}
}
}
如果在中注册了自定义验证器,则该验证器可以工作 `WebDataBinder` . 要通过代码加载工作消息,我需要配置 `MessageCodesResolver` 对于 `binder` .
### 问题是:
如何配置 `MessageCodesResolver` 为了我的剧本?可以分享吗 `messageSource` 对于分解器。。。最后一步应该是 `binder.setMessageCodesResolver(messageCodesResolver)` 希望如此。
### p、 s。 `mandatory.parameter` 以及 `mandatory.parameter2` 位于 `messages.properties` 文件:
mandatory.parameter=Required.
mandatory.parameter2=Required2.
暂无答案!
目前还没有任何答案,快来回答吧!