gpt4 book ai didi

java - 在 Web 服务中接受多种 JSON 格式

转载 作者:行者123 更新时间:2023-11-30 06:23:16 25 4
gpt4 key购买 nike

在我的 REST Web 服务中,我需要接受可以具有两种不同结构的 JSON。

目前我有:

@Path("/")
public class MyAppResource {
...
@Context private HttpServletRequest request;
...
@POST
@Produces(MediaType.APPLICATION_JSON)
public MyResponseItem check(MyRequestItem body) {
...
}
}

哪里

public class MyRequestItem {
...
@JsonCreator
public MyRequestItem(@JsonProperty("data") ArrayList<TextItem> data) {
...
}
...
}

class TextItem {
...
@JsonCreator
public TextItem(@JsonProperty("count") int count,
@JsonProperty("text") String text) {
...
}
...
}

因此它接受格式为 {"data":[{"count":123,"text":"abc"},...]} 的 JSON。

除了上述格式之外,我还需要接受以下格式:{"data":["abc",...]}。也就是说,我认为我需要更改 TextItem 以便它可以是 String 或上面的类。

如何实现这一目标?

最佳答案

如果您不介意这两种情况 (TextItem) 是同一个类,最简单的选择是再添加 1 个带有单个 TextItem 构造函数字符串参数。

这是演示:

public class Main {
public static String json1 = "{\"data\":[{\"count\":123,\"text\":\"abc\"}]}";
public static String json2 = "{\"data\":[\"abc\"]}";
public static void main(String[] args) throws IOException {
ObjectMapper mapper = new ObjectMapper();
System.out.println(mapper.readValue(json1, MyRequestItem.class));
System.out.println(mapper.readValue(json2, MyRequestItem.class));
}

@Data // lombok.Data;
@ToString // lombok.ToString;
public static class MyRequestItem {
private List<TextItem> data;
@JsonCreator
public MyRequestItem(@JsonProperty("data") ArrayList<TextItem> data) {
this.data = data;
}
}

@Data
@ToString
public static class TextItem {
private int count;
private String text;
@JsonCreator
public TextItem(@JsonProperty("count") int count,
@JsonProperty("text") String text) {
this.count = count;
this.text = text;
}

// this is the only thing you need to add to make it work
public TextItem( String text) {
this.text = text;
}
}
}

结果:

MyRequestItem(data=[TextItem(count=123, text=abc)])

MyRequestItem(data=[TextItem(count=0, text=abc)])

关于java - 在 Web 服务中接受多种 JSON 格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47699458/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com