如何在一个变量中解析 list<String> 或 String
How to parse list<String> or String in one variable
我正在处理 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\": 1\n" +
" }\n" +
" },\n" +
或
" \"constraints\": [\n" +
" {\n" +
" \"type\": \"NonNullRatio\",\n" +
" \"column\": \"ufi\",\n" +
" \"assertion\": {\n" +
" \"type\": \"LowerLimit\",\n" +
" \"threshold\": 1\n" +
" }\n" +
" },\n" +
您可以使用 this 选项配置 Jackson ObjectMapper
以接受单个值作为数组。
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]}
您需要告诉您的 Jackson 接受字符串作为数组。
您可以使用 -
@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;
}
我正在处理 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\": 1\n" +
" }\n" +
" },\n" +
或
" \"constraints\": [\n" +
" {\n" +
" \"type\": \"NonNullRatio\",\n" +
" \"column\": \"ufi\",\n" +
" \"assertion\": {\n" +
" \"type\": \"LowerLimit\",\n" +
" \"threshold\": 1\n" +
" }\n" +
" },\n" +
您可以使用 this 选项配置 Jackson ObjectMapper
以接受单个值作为数组。
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]}
您需要告诉您的 Jackson 接受字符串作为数组。
您可以使用 -
@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;
}