gpt4 book ai didi

java - 如何使用 Jackson 将复杂的 Json 对象序列化为 HTTP Get 的 QueryString?

转载 作者:行者123 更新时间:2023-11-29 21:15:44 36 4
gpt4 key购买 nike

假设我有以下对象:

public class ComplexJacksonObject extends BaseJsonObject {
public int Start;
public int Count;
public Person MyPerson;

public class Person extends BaseJsonObject {
public String Firstname;
public String Lastname;
public Address Where;
}

public class Address extends BaseJsonObject {
public String Street;
public int Number;
}
}

很明显,当我向 Jackson 请求此 JSON 时,我得到如下内容:

public String toJson(ComplexJacksonObject obj) {
try {
return generateMapper().writeValueAsString(obj);
} catch (JsonProcessingException e) {
e.printStackTrace();
return null;
}
}

// returned: {"MyPerson":{"Firstname":"First","Lastname":"Last","Where":{"Street":"Street","Number":15}},"Count":1,"Start":2}

然而,我对 QueryString 的需求是将顶级属性对转换为 Key=Value& 格式,因此类似于:

MyPerson={"Firstname":"First","Lastname":"Last","Where":{"Street":"Street","Number":15}}&Count=1&Start=2

当然还有 MyPerson=[This_Part_Needs_To_Be_Url_Encoded]。

Jackson 中是否有任何通用方法可以自动为我执行此操作?或者我会被迫提出自己的想法吗?一些字符串替换正则表达式?有任何想法吗?

最佳答案

[编辑] 注意:我误解了这个问题。我在下面的回答回答了如何解析 JSON 并获取 Java 对象。您想要获取键值对,其中 JSON 是对象的值。以下答案不会回答该问题。抱歉造成混淆。

您可以通过对 Java 模型使用 Jackson 注释并向 JSON 对象添加“类型”来解决此问题。您可能想出于您的目的对其进行研究,但这是我过去完成的一些代码的示例。

public class Requirement {
private String title;
private String reqId;

@JsonTypeInfo(use=JsonTypeInfo.Id.NAME, include=JsonTypeInfo.As.PROPERTY, property="type")
@JsonSubTypes({
@JsonSubTypes.Type(value=CountRequirementList.class, name="COUNT"),
@JsonSubTypes.Type(value=AndRequirementList.class, name="AND"),
@JsonSubTypes.Type(value=OrRequirementList.class, name="OR")
})
private List<RequirementList> fulfillments;

其中 baseObjectRequirementList,类名是 requirements 列表的类型。为了使从 JSON 来回更容易,有时只向对象添加一个类型会很方便。如果有帮助,我在下面包含了更多代码。 (注意:我没有包含 Jackson 所需的所有 getter 和 setter)

public abstract class RequirementList {
private LogicType type;
private String id;
private String title;
private String description;
protected float requiredCount; //For count type subclass. Designed to be count of credits
private List<Object> fulfillments;
}



public class OrRequirementList extends RequirementList {

public OrRequirementList() {
super();
super.setType(LogicType.OR);
}
}

关于java - 如何使用 Jackson 将复杂的 Json 对象序列化为 HTTP Get 的 QueryString?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21492529/

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