2017-03-22 21 views
1

我到處找如何反序列化JSON的一部分轉換爲對象,其餘進入的JSONObject。Java的反序列化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 
} 

的問題是,在反序列化後,我得到空對象{}裏面的「消息」。

有沒有人有任何想法呢?

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

編輯:

多一點信息,我使用Spring MVC中JSON是由POST消息發送到我的控制器。

控制器功能如下:

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

工作正常,我。請發佈[mcve]。 – shmosel

+0

這對我來說很好。你確定你使用了Gson的'JsonObject'類型嗎?請提供[mcve]。 –

+0

我正在使用'com.google.gson.JsonObject'。我正在使用帶有JSON的POST請求獲取輸入到我的REST控制器中。控制器看起來像這樣:'public String sendMessage(@RequestBody final className input,...);'我在函數入口後立即停止斷點並檢查我的輸入,ID在那裏但消息爲空 – eladyanai

回答

3

這是因爲春季嘗試,而你的對象持有GSON對象(不能與傑克遜被解析)來解析與傑克遜庫中的對象。

請參考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); 
    } 
} 
+0

謝謝你的回答。我使用的是Spring Boot,所以我已經添加到我的appConfig:'@Bean public HttpMessageConverters customConverters()'從教程和我的應用程序中添加了'@EnableAutoConfiguration(exclude = {JacksonAutoConfiguration.class})'但現在「message」是空值。甚至不 '{}'。你有任何其他想法?行! – eladyanai

+0

行!我知道了。 null的問題是因爲我在消息字段中有瞬態關鍵字。我已經刪除了瞬態,現在它工作!非常感謝你! – eladyanai

相關問題