javax的@Valid注解使用场景
Posted
技术标签:
【中文标题】javax的@Valid注解使用场景【英文标题】:javax's @Valid annotation usage scenario 【发布时间】: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
中以下列方式定义了一些验证,我想在继续之前验证ObjectMapper
在IncidentModel
中映射的字段:
@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
有什么替代方法吗?
感谢您的帮助。
【问题讨论】:
【参考方案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 factory
和Validator validator
实例变量设为JsonStringToObjectConverter
,这样您就不会在每次调用convertToObject
方法时重新创建它们。
【讨论】:
不客气!以上是关于javax的@Valid注解使用场景的主要内容,如果未能解决你的问题,请参考以下文章
Java使用@Valid+BindingResult进行controller参数校验