我遇到了一种情况,我必须支持现有的客户机,他们使用的RESTAPI负载低于有效负载,
{
"firstName": "First name",
"secondName": "Second name",
"dateOfBirth": "01/12/2020",
"profession": "Software Developer",
"salary": 0,
**"value": "value1"**
}
但现在根据需要,他们可以为值字段发送数组,如下所示:
{
"firstName": "First name",
"secondName": "Second name",
"dateOfBirth": "01/12/2020",
"profession": "Software Developer",
"salary": 0,
**"value": ["Value1", "value2", "Value3"]**
}
现有代码使用 @RequestBody
将其转换为 PersonDTO person
,该类还包含一个名为 isMutliValue()
& getMultiValueFor()
,这些方法基于逗号拆分字符串,然后决定并返回其中的值。但是现在对于这个需求,我必须做一个修改,以检查客户机是以值还是简单字符串形式发送数组。如果它是一个简单的字符串,那么不要基于逗号拆分它,只需处理它,但是如果它是一个数组,则从中取出值并发送单个值。
public class PersonDTO {
private String firstName;
private String secondName;
// Formats output date when this DTO is passed through JSON
@JsonFormat(pattern = "dd/MM/yyyy")
// Allows dd/MM/yyyy date to be passed into GET request in JSON
@DateTimeFormat(pattern = "dd/MM/yyyy")
private Date dateOfBirth;
private String profession;
private BigDecimal salary;
private String value;
public PersonDTO(
String firstName, String secondName, Date dateOfBirth, String profession, BigDecimal salary, String value) {
this.firstName = firstName;
this.secondName = secondName;
this.dateOfBirth = dateOfBirth;
this.profession = profession;
this.salary = salary;
this.value = value;
}
public PersonDTO() {}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getSecondName() {
return secondName;
}
public void setSecondName(String secondName) {
this.secondName = secondName;
}
public Date getDateOfBirth() {
return dateOfBirth;
}
public void setDateOfBirth(Date dateOfBirth) {
this.dateOfBirth = dateOfBirth;
}
public String getProfession() {
return profession;
}
public void setProfession(String profession) {
this.profession = profession;
}
public BigDecimal getSalary() {
return salary;
}
public void setSalary(BigDecimal salary) {
this.salary = salary;
}
public Object getValue() {
return value;
}
public void setValue(Object value) {
this.value = value;
}
public boolean isMultiValued() {
return value.split(",").length > 1;
}
public String[] getMultiValues() {
return value.split(",");
}
public String toString(){
return "FirstName : " + firstName +" SecondName : "+ secondName +", Value : "+ value.toString();
}
}
请帮助我,我们如何在json负载的单个字段中处理不同类型的值。
1条答案
按热度按时间iqjalb3h1#
在这种情况下,可以实现自定义反序列化。因此,您应该定义
PersonDTODeserializer
从JsonDeserializer
和覆盖deserialize
方法。把它用在
PersonDTO
班级。