【问题标题】:Java deserializing part of the JSON into object and the rest into JsonObjectJava 将部分 JSON 反序列化为对象,将其余部分反序列化为 JsonObject
【发布时间】:2017-08-15 01:26:48
【问题描述】:

我到处寻找如何将部分 JSON 反序列化为对象,将其余部分反序列化为 JsonObject。

例如:

{
  "id" : "123",
  "message" : {"subject" : "test sub" , "body" : "test body"}
}

我想将此 JSON 反序列化为此类:

public class className {
    private String id;
    private transient JsonObject message;

    // getters and setters
}

问题是反序列化后我得到空对象{}inside "message"。

有人知道吗?

================================================ =======

编辑:

更多信息,我正在使用 Spring MVC,JSON 正在通过 POST 消息发送到我的控制器中。

控制器函数如下所示:

public @ResponseBody String publish(@RequestBody final className input, final HttpServletRequest request,
        final HttpServletResponse response) {
    //input.message = {}
}

【问题讨论】:

  • 对我来说很好。请发帖minimal reproducible example
  • 这对我来说很好。您确定您使用的是来自 Gson 的正确 JsonObject 类型吗?请提供minimal reproducible example
  • 我正在使用com.google.gson.JsonObject。我使用 POST 请求和正文中的 JSON 将输入输入到我的 REST 控制器中。控制器如下所示:public String sendMessage(@RequestBody final className input, ...); 我在函数入口后立即停止断点并检查我的输入,ID 在那里但消息为空
  • 因此涉及到 Spring MVC 和可能的 Jackson。请在您的问题中提供这些详细信息。 Jackson 在类路径上吗?
  • 谢谢,我已经编辑了我的问题。

标签: java json spring-mvc gson


【解决方案1】:

这是因为 Spring 尝试使用 Jackson 库解析您的对象,而您的对象包含 Gson 对象(无法使用 Jackson 解析)。

请参考Configure Gson in Spring

@Configuration
@EnableWebMvc
public class Application extends WebMvcConfigurerAdapter {

    @Override
    public void configureMessageConverters(List<HttpMessageConverter < ? >> converters) {
        GsonHttpMessageConverter gsonHttpMessageConverter = new GsonHttpMessageConverter();
        converters.add(gsonHttpMessageConverter);
    }
}

【讨论】:

  • 感谢您的回答。我正在使用 Spring Boot,所以我从教程中添加了我的 appConfig:@Bean public HttpMessageConverters customConverters(),并在我的应用程序中添加了@EnableAutoConfiguration(exclude = { JacksonAutoConfiguration.class }),但现在“消息”为空。甚至不 '{}'。你还有什么别的想法吗?
  • 好的!我得到了它。 null 的问题是因为我在消息字段上有瞬态关键字。我已经删除了瞬态,现在它可以工作了!非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-04
  • 2021-01-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多