Java Spring@valid in嵌套对象可以';t从messages.properties检索消息
我有一个控制器,其中add方法有DTO:Java Spring@valid in嵌套对象可以';t从messages.properties检索消息,java,spring,spring-rest,Java,Spring,Spring Rest,我有一个控制器,其中add方法有DTO: @PostMapping(consumes = "application/json") @ResponseStatus(HttpStatus.CREATED) public String add(@RequestBody ProductDTO productDTO) { //... } DTO具有应验证的实体字段: @Data @NoArgsConstructor public class ProductDTO { @
@PostMapping(consumes = "application/json")
@ResponseStatus(HttpStatus.CREATED)
public String add(@RequestBody ProductDTO productDTO) {
//...
}
DTO具有应验证的实体字段:
@Data
@NoArgsConstructor
public class ProductDTO {
@Valid
Product product;
//...
}
product类具有从messages检索消息的约束。属性:
@Entity
@Table(name = "products")
@Data
@NoArgsConstructor
public class Product {
@NotNull(message = "{error.notNull}")
@Size(min = 1, max = 50, message = "{products.error.nameSize}")
private String name;
//...
}
为了将验证器绑定到messages.properties,我设置了配置类:
@Configuration
@EnableWebMvc
public class WebConfiguration implements WebMvcConfigurer {
@Bean
public MessageSource messageSource() {
ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
messageSource.setDefaultEncoding("UTF-8");
messageSource.setBasename("classpath:messages");
return messageSource;
}
@Bean
@Override
public Validator getValidator() {
LocalValidatorFactoryBean localValidatorFactoryBean = new LocalValidatorFactoryBean();
localValidatorFactoryBean.setValidationMessageSource(messageSource());
return localValidatorFactoryBean;
}
}
如果我尝试检查Product类的验证并发送JSON数据,如下所示:
{
"name": null
}
或:
然后我有以下信息:
{error.notNull}
或:
这是消息变量的名称,而不是其值。
如果我在控制器的add方法中使用Product类而不是ProductDTO类,则一切正常,消息显示正确,但随着DTO情况的变化。您必须应用${propertName}
{error.notNull}
{products.error.nameSize}