如何在<String>一个变量中解析列表或字符串



我正在研究JSON序列化,我有一个场景,在JSON中的字段可以是字符串/字符串列表。我不确定如何序列化这样的对象。

@Data
public class NonNullRatio extends Constraint {
@NonNull private List<String> column;
@NonNull private Assertion assertion;
}

输入JSON可以是-

"        "constraints": [n" +
"          {n" +
"            "type": "NonNullRatio",n" +
"            "column": ["transaction_status", "user_charge_id", "psp_transaction_id"],n" +
"            "assertion": {n" +
"              "type": "LowerLimit",n" +
"              "threshold": 1n" +
"            }n" +
"          },n" +

"        "constraints": [n" +
"          {n" +
"            "type": "NonNullRatio",n" +
"            "column": "ufi",n" +
"            "assertion": {n" +
"              "type": "LowerLimit",n" +
"              "threshold": 1n" +
"            }n" +
"          },n" +

你需要告诉你的Jackson接受String作为Array。

你可以使用-

@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)

你的POJO应该看起来像-

@Data
public class NonNullRatio extends Constraint {
@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
@NonNull private List<String> column;
@NonNull private Assertion assertion;
}

您可以使用此选项配置JacksonObjectMapper以接受单个值作为数组。

new ObjectMapper().configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true)

,

class SomeClass{
private List<String> values;
// getter setters

@Override
public String toString() {
return "SomeClass{" +
"values=" + values +
'}';
}
}

public class TestJSON {
public static void main(String[] args) throws JsonProcessingException {
ObjectMapper objectMapper = new ObjectMapper()
.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true);
String jsonString = "{"values":"A"}";
System.out.println(objectMapper.readValue(jsonString, SomeClass.class));
jsonString = "{"values":["A","B"]}";
System.out.println(objectMapper.readValue(jsonString, SomeClass.class));
}
}

输出
SomeClass{values=[A]}
SomeClass{values=[A, B]}

最新更新