gpt4 book ai didi

spring - Java : GroupSequenceProvider for Validation, 对象在 getValidationGroups 方法中为空

转载 作者:行者123 更新时间:2023-12-05 07:55:10 26 4
gpt4 key购买 nike

这就是我要实现的目标:我有一个更新请求对象,允许用户进行部分更新。但我只想验证该字段是否在请求正文中。否则,可以为空。为此,我使用 GroupSequenceProvider 让 validator 知道要验证哪些组。我在这里做错了什么?如果有错误,我该如何解决?

文档:https://docs.jboss.org/hibernate/validator/5.1/reference/en-US/html/chapter-groups.html#example-implementing-using-default-group-sequence-provider

@GroupSequenceProvider(UpdateUserRegistrationGroupSequenceProvider.class)
public class UpdateUserRegistrationRequestV1 {

@NotBlank(groups = {EmailExistsInRequest.class})
@Email(groups = {EmailExistsInRequest.class})
@SafeHtml(whitelistType = SafeHtml.WhiteListType.NONE, groups = {EmailExistsInRequest.class})
private String email;

@NotNull(groups = {PasswordExistsInRequest.class})
@Size(min = 8, max = 255, groups = {PasswordExistsInRequest.class})
private String password;

@NotNull(groups = {FirstNameExistsInRequest.class})
@Size(max = 255, groups = {FirstNameExistsInRequest.class})
@SafeHtml(whitelistType = SafeHtml.WhiteListType.NONE, groups = {FirstNameExistsInRequest.class})
private String firstName;

// THERE ARE GETTERS AND SETTERS BELOW
}

组序列提供者代码:

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;
}
}

我正在使用 Spring MVC,所以这就是我的 Controller 方法的样子,

    @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));
}

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

我做错了什么?

最佳答案

我也遇到了同样的问题,希望能解决

您只需检查对象是否为 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;
}

关于spring - Java : GroupSequenceProvider for Validation, 对象在 getValidationGroups 方法中为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30359124/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com