Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring@valid in嵌套对象可以';t从messages.properties检索消息_Java_Spring_Spring Rest - Fatal编程技术网

Java Spring@valid in嵌套对象可以';t从messages.properties检索消息

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 { @

我有一个控制器,其中add方法有DTO:

@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}