当前位置: 首页 > 知识库问答 >
问题:

带有JSONObject的Spring Boot RequestBody

濮阳振海
2023-03-14

我正在设置RestController以接收一个json,其中包含另一个json(我现在不知道第二个json的结构)。。。比如:

{
    "field1":"value1",
    "jsonField":{
        "anotherField1":1,
        "anotherField2":0.2
    }
}

我的请求类是这样的:

public class Request {
    private String field1;
    private org.json.JSONObject jsonField;
}

但是当我调用我的控制器时,field1被设置,但是jsonField没有设置。它只用{}

编辑:这是控制器方法:

@PostMapping
public ResponseEntity postMethod(@RequestBody Request request) {}

共有1个答案

曹自怡
2023-03-14

如果希望自动映射,则需要为jsonField对象定义自己的类。

public class Request {
    private String field1;
    private JsonField jsonField;
}

public class JsonField {
    private Integer anotherField1;
    private Integer anotherField2;
}

如果您事先不知道它的结构,方法会有所不同。您可以使用Map

public class Request {
    private String field1;
    private Map<String, Object> jsonField;
}

或Jackson的JsonNode类型

public class Request {
    private String field1;
    private JsonNode jsonField;
}

你可以在这里了解更多。

 类似资料:
  • 问题内容: 我正在使用和。我知道,这两个类和是不相容的,但我仍然希望做的相当自然的事情- 我想换了每一个在每个迭代步骤一解析(嵌套内部的)。我尝试这样做: 当我尝试编译此代码时,即使看起来很自然,实际上我也会收到“不兼容的类型”错误。所以,我的问题是迭代的最佳方法是什么? 问题答案: 显然,实现了一个 原始 Iterator。这意味着每个元素都被视为。您可以尝试投射: 这就是在Java 1.4和更

  • 当我添加测试JsonObject列表时,只有最后一个JsonObject被添加到JsonArray。我不明白为什么,因为我遵循oracle的留档。https://docs.oracle.com/javaee/7/api/javax/json/JsonArray.html 名为TestRun的类中的方法 Main(注意:我使用faker生成随机信息)

  • 问题内容: 我有一个来自服务器的JSON字符串,它看起来像这样: 我的任务是获取“ term_id”和“ name”字段的值。我曾经使用以下代码从当前JSONObject中获取“类别”对象: 和看起来像这样: 但是在那之后,我不知道如何获得这些领域。有什么方法可以从JSONObject获取所有JSONObject子级吗? 如果您有源代码或可以举一个例子,请与我分享。 问题答案: 在这里,您可以检索

  • 问题内容: 我有一个与数据库对话的servlet,然后返回一个有序(按时间排序)对象的列表。在servlet部分,我有 从日志中,我可以看到数据库以正确的顺序返回了User对象。 在前端,我有 但是顺序改变了。 我只在返回的列表很大(超过130个用户)时才注意到这一点。 我尝试使用Firebug进行调试,Firebug中的“响应选项卡”显示列表的顺序与servlet中的日志不同。 我做错了什么吗?

  • 问题内容: 我正在IntelliJ中使用Maven。我有一类使用: pom.xml文件中的Maven依赖项: 我可以做并成功建立。但是当我尝试运行它时,我得到: 错误:java.lang.ClassNotFoundException:org.json.JSONObject 我在这里还有什么想念的吗?谢谢! 问题答案: 将json jar 添加到您的类路径 或使用 或将其添加到您的Maven pom

  • 问题内容: 我想向的现有实例添加属性。如果此属性为,则非常简单: 但是,我也想添加一个,但找不到创建的实例的方法。这是我可以做的: 但是我想不出一种更肮脏的方式来完成任务。那么-是否有更直接,更简洁的方法向现有实例添加? 问题答案: 好吧,我自己弄清楚了: 你不能 。 应该是一成不变的。即使存在,在运行时也会抛出。因此,如果您想向现有资产添加键/值对,则需要类似 然后与