Java @没有考虑到

Java @没有考虑到,java,validation,spring-mvc,bean-validation,Java,Validation,Spring Mvc,Bean Validation,我设置了一个非常简单的REST服务,并开始使用Bean验证对其进行验证。一切都很顺利,直到我注意到我需要对同一对象的不同方法进行不同的验证 我尝试了组验证。 我的问题是,当我用@Validated(Group.class)注释替换我的functioning@Valid注释时,不再进行验证 以下是我的对象和配置文件: 终点: <jaxrs:server id="myRestServices" address="/v1"> <jaxrs:serviceBeans>

我设置了一个非常简单的REST服务,并开始使用Bean验证对其进行验证。一切都很顺利,直到我注意到我需要对同一对象的不同方法进行不同的验证

我尝试了组验证。 我的问题是,当我用@Validated(Group.class)注释替换我的functioning@Valid注释时,不再进行验证

以下是我的对象和配置文件:

终点:

 <jaxrs:server id="myRestServices" address="/v1">
    <jaxrs:serviceBeans>
        <ref bean="rentalsService"/>
    </jaxrs:serviceBeans>
    <jaxrs:providers>
        <ref bean="jsonProvider"/>
    </jaxrs:providers>
    <jaxrs:inInterceptors>
        <ref bean="validationInInterceptor" />
    </jaxrs:inInterceptors>
</jaxrs:server>
    <bean id="validationProvider" class="org.apache.cxf.validation.BeanValidationProvider" />
<bean id="validationInInterceptor" class="org.apache.cxf.jaxrs.validation.JAXRSBeanValidationInInterceptor">
     <property name="provider" ref="validationProvider" />
</bean>
ServiceImpl

@Path("/rentals")
@Produces(MediaType.APPLICATION_JSON)
public class RentalServiceImpl implements RentalsService {

private RentalBusinessService rentalBusinessService;

@POST
@Override
@Consumes(MediaType.APPLICATION_JSON)
public Rental createRental(@Validated({ CreateValidationGroup.class }) Rental rental) {
    return rentalBusinessService.createRental(rental);
}

@PUT
@Override
@Path("/{RentalId}")
@Consumes(MediaType.APPLICATION_JSON)
public Rental updateRental(@PathParam("RentalId") String RentalId, @Validated({ UpdateValidationGroup.class }) Rental rental) {
    return rentalBusinessService.updateRental(RentalId, rental);
}
` 上述团体:

    public interface CreateValidationGroup {

}  public interface UpdateValidationGroup {

}
最后是目标:

public class Rental {   

@Size(min = 2, max = 14, groups = { UpdateValidationGroup.class }, message = " 2 < Status < 4 ") 
private String status;


@NotNull
@Size(min = 2, max = 14, message = " 2 < Product < 4 ")
private String product;

@Size(min = 2, max = 14, groups = { CreateValidationGroup.class }, message = " 2 < ID < 4 ")
private String RentalId;
公共类租赁{
@大小(最小值=2,最大值=14,组={UpdateValidationGroup.class},message=“2

我可以不这样使用组验证吗?将@Validated切换回@validatedtriggers Validation。

所以我继续手动执行:

注入一个Smartvalidator,并在指定组时对我的对象调用validate方法。这正是我试图避免的

private SmartValidator validator;

private RentalBusinessService rentalBusinessService;

@POST
@Override
@Consumes(MediaType.APPLICATION_JSON)
public Rental createRental(Rental rental) {

    Errors errors = new BeanPropertyBindingResult(rental, "rental");
    validator.validate(rental, errors, CreateValidationGroup.class);

    if (errors.hasErrors()) {
       //dostuff
    }
以及注入的bean:

<bean id="smartValidator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"/>


如果有人知道如何通过注释进行验证,我仍然想知道我哪里出了问题。

我们只在web层使用了组验证。不确定是否可以在服务层进行验证。当我们在web层执行此操作时,它与您实现的类似
<bean id="smartValidator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"/>