Spring Java:GroupSequenceProvider用于验证,getValidationGroups方法中的对象为null

Spring Java:GroupSequenceProvider用于验证,getValidationGroups方法中的对象为null,spring,hibernate,validation,spring-mvc,spring-boot,Spring,Hibernate,Validation,Spring Mvc,Spring Boot,这就是我努力实现的目标: 我有一个更新请求对象,允许用户进行部分更新。但我只想验证请求主体中的字段。否则,可以为null。为了实现这一点,我使用GroupSequenceProvider让验证器知道要验证哪些组。我做错了什么?如果出现错误,我该如何修复 文件: 组序列提供程序代码: public class UpdateUserRegistrationGroupSequenceProvider implements DefaultGroupSequenceProvider<UpdateUs

这就是我努力实现的目标: 我有一个更新请求对象,允许用户进行部分更新。但我只想验证请求主体中的字段。否则,可以为null。为了实现这一点,我使用GroupSequenceProvider让验证器知道要验证哪些组。我做错了什么?如果出现错误,我该如何修复

文件:

组序列提供程序代码:

public class UpdateUserRegistrationGroupSequenceProvider implements DefaultGroupSequenceProvider<UpdateUserRegistrationRequestV1> {

public interface EmailExistsInRequest {}

public interface PasswordExistsInRequest {}

public interface FirstNameExistsInRequest {}

@Override
public List<Class<?>> getValidationGroups(UpdateUserRegistrationRequestV1 updateUserRegistrationRequestV1) {
    List<Class<?>> defaultGroupSequence = new ArrayList<Class<?>>();
    defaultGroupSequence.add(Default.class);
    defaultGroupSequence.add(UpdateUserRegistrationRequestV1.class);

    if(StringUtils.hasText(updateUserRegistrationRequestV1.getEmail())) {
        defaultGroupSequence.add(EmailExistsInRequest.class);
    }

    if(StringUtils.hasText(updateUserRegistrationRequestV1.getPassword())) {
        defaultGroupSequence.add(PasswordExistsInRequest.class);
    }

    if(StringUtils.hasText(updateUserRegistrationRequestV1.getFirstName())) {
        defaultGroupSequence.add(FirstNameExistsInRequest.class);
    }

    return defaultGroupSequence;
}
}
现在的问题是,UpdateUserRegistrationGroupSequenceProvider.getValidationGroups方法中的参数“updateUserRegistrationRequestV1”为null。这是我在请求正文中发送的请求对象,我正在发送电子邮件字段


我做错了什么?

我也经历了同样的问题,希望能解决它

您只需检查对象是否为null,并将所有条件放入其中

public List<Class<?>> getValidationGroups(Employee object) {
        List<Class<?>> sequence = new ArrayList<>();
        //first check if the object is null
        if(object != null ){
             if (!object.isDraft()) {
                    sequence.add(Second.class);
                }
        }


        // Apply all validation rules from default group
        sequence.add(Employee.class);

        return sequence;
    }
public List>sequence=new ArrayList();
//首先检查对象是否为空
if(对象!=null){
如果(!object.isDraft()){
顺序。添加(二级);
}
}
//应用默认组中的所有验证规则
sequence.add(Employee.class);
返回序列;
}

我有同样的问题吗?你能解决这个问题吗?你能解决这个问题吗?我也遇到了同样的问题。getValidationGroups的文档说明:如果此方法是作为*{@linkplain javax.validation.Validator#validateValue(类、字符串、对象、类[])Validator#validateValue}的一部分调用的,则此值可以是{@code null}。
    @RequestMapping(value = "/{userId}", method = RequestMethod.PUT, consumes = MediaType.APPLICATION_JSON_VALUE)
@ResponseStatus(HttpStatus.NO_CONTENT)
public void updateUser(@PathVariable("userId") Long userId,
                       @RequestBody @Valid UpdateUserRegistrationRequestV1 request) {

    logger.info("Received update request = " + request + " for userId = " + userId);

    registrationService.updateUser(userId, conversionService.convert(request, User.class));
}
public List<Class<?>> getValidationGroups(Employee object) {
        List<Class<?>> sequence = new ArrayList<>();
        //first check if the object is null
        if(object != null ){
             if (!object.isDraft()) {
                    sequence.add(Second.class);
                }
        }


        // Apply all validation rules from default group
        sequence.add(Employee.class);

        return sequence;
    }