如何在java.validation约束上使用Spring RestController?

问题描述 投票:0回答:1

我怎样才能在@RestController限制条件下弹簧javax.validation属性?

我想我可以添加/src/main/resources/messages.propertiesmessages_de.properties,然后spring会检测它们并启用正确的i18n?但似乎并非如此:

@RestController
public void TestController {
       @PostMapping
       public void post(@Valid @RequestBody Person p) {
       }
}

public class Person {
       private String firstname;

       @javax.validation.constraints.NotBlank(message = "{errors.person.lastname}")
       private String lastname;
}

messages.properties:
errors.person.lastname=person should provide a lastname

messages_de.properties:
errors.person.lastname=Person ohne Nachnamen

问题:如果我现在发送POST请求:

{
    "exception": "org.springframework.web.bind.MethodArgumentNotValidException",
    "message": "'lastname': {errors.person.lastname}"
}

问题1:我是否真的必须告诉spring如何应用i18n如下?或者我可以以某种方式依赖自动检测功能?

下一步是添加以下配置。现在,正确解析了默认消息。但是,每当我想要验证i18n时,是否有必要真正添加它?

@Configuration
public class MessageSourceConfig {
    @Bean
    public LocalValidatorFactoryBean localValidatorFactoryBean() {
        LocalValidatorFactoryBean bean = new LocalValidatorFactoryBean();
        bean.setValidationMessageSource(messageSource());
        return bean;
    }

    @Bean
    public MessageSource messageSource() {
        ResourceBundleMessageSource bundle = new ResourceBundleMessageSource();
        bundle.setBasenames("messages");
        return bundle;
    }
}

问题2:我需要那些bean:我现在如何发送切换语言的帖子请求?我尝试添加像?local=de, locale=de, ?lang=de, language=de这样的get-query参数,但它们都没有工作......

java spring internationalization spring-web javax.validation
1个回答
0
投票

在@M的帮助下。 Deinum上面,这是失踪的和平:

    @Bean
    public LocalValidatorFactoryBean localValidatorFactoryBean(MessageSource messageSource) {
        LocalValidatorFactoryBean bean = new LocalValidatorFactoryBean();
        bean.setValidationMessageSource(messageSource);
        return bean;
    }

然后必须发送带有http标头Accept-Language=de的Web请求。

© www.soinside.com 2019 - 2024. All rights reserved.