Java Spring Boot应用程序中的内部化

Java Spring Boot应用程序中的内部化,java,spring,spring-boot,Java,Spring,Spring Boot,对不起我的英语。我正在开发一个spring启动应用程序,我有以下情况。我实现了内部化,并创建了以下配置类 @EnableWebMvc @Configuration public class WebMvcConfiguration implements WebMvcConfigurer { @Bean public LocaleResolver localeResolver() { AcceptHeaderLocaleResolver localeResolve

对不起我的英语。我正在开发一个spring启动应用程序,我有以下情况。我实现了内部化,并创建了以下配置类

@EnableWebMvc
@Configuration
public class WebMvcConfiguration implements WebMvcConfigurer {   

  @Bean
    public LocaleResolver localeResolver() {
        AcceptHeaderLocaleResolver localeResolver = new AcceptHeaderLocaleResolver();
        localeResolver.setDefaultLocale(new Locale("es_ES"));
        return localeResolver;
    }  
   
    @Bean
    @Override
    public Validator getValidator() {
        LocalValidatorFactoryBean bean = new LocalValidatorFactoryBean();
        bean.setValidationMessageSource(resourceBundleMessageSource());
        return bean;
    }

    
    @Bean("messageSource")
    public MessageSource resourceBundleMessageSource() {
        ReloadableResourceBundleMessageSource messageSource
                = new ReloadableResourceBundleMessageSource();
        messageSource.setBasename("classpath:messages");
        messageSource.setDefaultEncoding("UTF-8");
        return messageSource;
    }
    

}
我还有两个属性文件
messages.properties
messages\u-us.properties

我定义了一个用户实体类,如下所示:

@Entity
@Table(name = "users", uniqueConstraints = @UniqueConstraint(columnNames = "email"))
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class User implements Serializable {    

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id", table = "users", nullable = false)
    private Long id;

    @NotEmpty(message = "{not.field.empty}")
    @NotNull(message = "{not.field.empty}")
    @Column(name = "name")
    private String name;

    @Column(name = "lastname", table = "users", nullable = false, length = 100)
    private String lastname;

    @Column(name = "birthday", table = "users")
    @Temporal(TemporalType.DATE)
    @NotNull(message = "birthday {not.empty.field}")
    private Date birthday;

}
当我试图通过调用以下端点来测试验证时

    @PostMapping("/users")
    @ResponseStatus(HttpStatus.CREATED)
    public ResponseEntity<?> createUser(@Valid @RequestBody User user) {
//code...
}
但是当我在
服务
类中使用@Valid时

    @Override
    @Transactional()
    public User saveUser(@Valid User user) { 
//code...
}
我没有收到已翻译的消息错误消息

{
    "timestamp": 1599169130869,
    "status": 400,
    "error": "Not validate field",
    "message": [
        "roles {not.empty.field}",
        "birthday {not.empty.field}"
    ],
    "path": "/api/v1/users"
}
有人知道这里有什么问题吗?
谢谢

假设您的saveUser服务方法仅从REST API端点方法“createUser”调用,该方法已在验证用户实体。我认为在服务方法参数中也不需要使用@Valid。rest端点已经在执行所需的操作


这篇文章可能会对你有所帮助-

谢谢你的回复。我需要在服务中实现@Valid,因为例如在端点注册中,我没有使用像RequestBody这样的模型用户,但是如果数据有效,我创建并保存用户,调用用户服务:`@PostMapping(“/auth/signup”)@ResponseStatus(HttpStatus.CREATED)public ResponseEntity signup(@Valid@RequestBody SignUp SignUp){userService.saveUser(…)}我会读这篇文章的,谢谢
{
    "timestamp": 1599169130869,
    "status": 400,
    "error": "Not validate field",
    "message": [
        "roles {not.empty.field}",
        "birthday {not.empty.field}"
    ],
    "path": "/api/v1/users"
}