是否可以@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以 String 的形式接收 JSON 并將其映射到IncidentModel類。我IncidentModel以下面的方式定義了一些驗證,我想ObjectMapper在IncidentModel進一步進行之前驗證由in映射的欄位:
@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;
}
上面的格式好像不行,有沒有其他方法可以使用@ValidinconvertToObject方法?
謝謝你的幫助。
uj5u.com熱心網友回復:
您可以執行以下操作:
@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方法時重新創建它們。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/360715.html
