【问题标题】:javax's @Valid annotation usage scenariojavax的@Valid注解使用场景
【发布时间】:2021-11-17 17:43:28
【问题描述】:

下面的场景可以使用@Valid (javax.validation.Valid)吗?

import com.fasterxml.jackson.databind.ObjectMapper;
import javax.validation.Valid;
import com.incident.tool.model.IncidentModel;

@Service
public class JsonStringToObjectConverter {

    public IncidentModel convertToObject(String json) throws JsonMappingException, JsonProcessingException {
        @Valid
        IncidentModel incidentModel = new ObjectMapper().readValue(json, IncidentModel.class);
        return incidentModel ;
    }
}

这里JsonStringToObjectConvertor 以字符串的形式接收JSON,并将其映射到IncidentModel 类。我在IncidentModel 中以下列方式定义了一些验证,我想在继续之前验证ObjectMapperIncidentModel 中映射的字段:

@Component
@Getter
@Setter
@ToString
@NoArgsConstructor
@AllArgsConstructor
public class IncidentModel extends IncidentInfo {
    @NotEmpty
    private String empId;

    @NotEmpty
    @Size(min = 2, max = 30)
    private String empName;

    @NotEmpty
    private String title;
    private String description;
    private String assignedTo;
    private String severity;
    private String incidentNumber;
    private String dateCreated;
    private String dateClosed;
    private String closingNotes;
}

上面的格式好像不行,convertToObject方法中的@Valid有什么替代方法吗?

感谢您的帮助。

【问题讨论】:

    标签: java spring-boot hibernate-validator


    【解决方案1】:

    你可以这样做:

    @Service
    public class JsonStringToObjectConverter {
    
        public IncidentModel convertToObject(String json) throws JsonMappingException, JsonProcessingException {
            IncidentModel incidentModel = new ObjectMapper().readValue(json, IncidentModel.class);
            
            ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
            Validator validator = factory.getValidator();
            Set<ConstraintViolation<IncidentModel>> errors = validator.validate(incidentModel);
            
            return incidentModel;
        }
    }
    

    然后您可以对此进行优化并将ValidatorFactory factoryValidator validator 实例变量设为JsonStringToObjectConverter,这样您就不会在每次调用convertToObject 方法时重新创建它们。

    【讨论】:

    • 不客气!
    猜你喜欢
    • 2022-08-14
    • 1970-01-01
    • 2017-09-26
    • 2017-12-12
    • 2014-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多