如何让Spring在REST服务上调用验证器?

时间:2015-07-20 22:55:14

标签: java spring rest hibernate-validator

我研究过很多很多答案,但我仍然无法看到我做错了什么。

我有一个REST服务控制器,它将bean作为参数,我想验证bean上的字段是否正确设置。

以下是我的配置对象(的一部分)。

@Configuration
@ComponentScan({...})
@EnableWebMvc
public class AppConfig extends WebMvcConfigurerAdapter {
    @Bean
    public Validator validator() {
        LocalValidatorFactoryBean validatorBean = new LocalValidatorFactoryBean();
        return validatorBean;
    }

    @Override
    public Validator getValidator() {
        return validator();
    }
}

我无法判断这些是否必要,但我可以告诉他们从未打过电话,所以也许他们会在错误的地方?

以下是我的pom.xml的一部分:

<dependency>
    <groupId>javax.validation</groupId>
    <artifactId>validation-api</artifactId>
    <version>1.1.0.Final</version>
</dependency>
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>5.1.3.Final</version>
</dependency>
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-validator-annotation-processor</artifactId>
    <version>5.1.1.Final</version>
</dependency>
<dependency>
    <groupId>javax.el</groupId>
    <artifactId>javax.el-api</artifactId>
    <version>3.0.0</version>
    <scope>provided</scope>
</dependency>

我不认为el对于我所做的事情是必要的,但是我把它包括在内以防它有所作为。

这是我的bean类的一部分,需要进行验证:

public class ContactInfo {
    @NotNull
    @Size(min=1, max=50)
    private String phone;
    public String getPhone() {
        return phone;
    }
    public void setPhone(String phone) {
        this.phone = phone;
    }
}

最后,这是Rest Controller的(部分):

@RestController
@RequestMapping("/contact")
public class ContactController {
    private static final String USER_ID_ATTRIBUTE = "userId";

    @Autowired
    private Validator validator;

    @Autowired
    @Qualifier("contactService")
    private ContactService service;

    @RequestMapping("/submit")
    public void submitContact(
        @Valid @RequestBody ContactInfo formData, BindingResult result) throws Exception {
        assert(validator != null);
        if(result.hasErrors()) {
            throw new Exception("I don't like it one bit.");
        }
        service.submitContact(formData);
    }
}

在调试器中,我可以看到传入的验证器是OptionalValidatorFactoryBean,而result.hasErrors()始终为false。

传入控制器的JSON包括:

{ "phone":"" }

我认为应该触发验证错误,因为它不符合最小尺寸。

0 个答案:

没有答案