2016-07-18 12 views
0

jqueryデータ型へのAjaxレスポンスの一部としてLocaldateを渡す必要があります。 LocalDateフィールドに値が表示されません。代わりに、[object、Object]を出力します。明らかに、LocalDateはデシリアライズされていませんでした。 Localdateをdeserializeして適切に表示する方法を説明してください。AjaxレスポンスでLocalDateが解析されない

var table = $("#example").DataTable({ 
      "bProcessing" : true, 
      "bServerSide" : true, 
"sAjaxSource" : "jsonSource.web", 
      "aoColumns" : [ 
      { 
       "mData" : "name" 
      }, { 
       "mData" : "position" 
      }, { 
       "mData" : "office" 
      }, { 
       "mData" : "phone" 
      }, { 
       "mData" : "salary" 
      }, { 
       "mData" : "dob" 
      } 
      ], 
      columnDefs : [ { 
       targets : [ 5 ], 
       render : function(data, type, row) { 
        var json = JSON.stringify(data); 
        var date = JSON.parse(json); 
        console.log("json: " + json + "date : " + row); 
        return data; 
       } 
      } 
      } ] 
      }); 

サーバーサイドコード:

@RequestMapping(value = "/springPaginationDataTables.web", method = RequestMethod.GET, produces = "application/json") 
    public @ResponseBody String springPaginationDataTables(HttpServletRequest request) throws IOException { 

     //Fetch search parameter 
     String searchParameter = request.getParameter("sSearch"); 
     final String sortColumn = request.getParameter("iSortCol_0"); 
     final String sortOrder = request.getParameter("sSortDir_0"); 
     //Fetch Page display length 
     Integer pageDisplayLength = Integer.valueOf(request.getParameter("iDisplayLength")); 
     //Fetch the page number from client 
     Integer pageNumber = 0; 
     if (null != request.getParameter("iDisplayStart")) 
      pageNumber = (Integer.valueOf(request.getParameter("iDisplayStart"))/pageDisplayLength)+1;  
     System.out.println("sSearch : "+searchParameter); 
     System.out.println("pageDisplayLength : "+pageDisplayLength); 
     System.out.println("pageNumber : "+pageNumber); 
     System.out.println("iSortCol_0 : "+sortColumn); 
     System.out.println("sSortDir_0 : "+sortOrder); 

     List<Person> personsList = new ArrayList<Person>(); 
       Person person2 = new Person(); 
       person2.setName("John Landy"); 
       person2.setPosition("System Architect"); 
       person2.setSalary("$320,800"); 
       person2.setOffice("NY"); 
       person2.setPhone("999999999"); 
       person2.setStart_date("05/05/2010"); 
       person2.setDob(LocalDate.parse("1989-07-09")); 
personsList.add(person2); 
//apply server side search 
//apply server side sort 
//BuildDataTable object    
     PersonJsonObject personJsonObject = new PersonJsonObject(); 
     //Set Total display record 
     personJsonObject.setiTotalDisplayRecords(500); 
     //Set Total record 
     personJsonObject.setiTotalRecords(500); 
     personJsonObject.setAaData(personsList); 

     Gson gson = new GsonBuilder().setPrettyPrinting().create(); 
     String json2 = gson.toJson(personJsonObject); 

     return json2; 
     } 
+0

に_ "明らかに、それはLOCALDATEがデシリアライズされていなかったことを意味する。" _ - あなたはかなりわかりませんまだその結論を引き出すことはできない。オブジェクトが初期オブジェクトの内部にネストされている可能性があります。この場合、デシリアライズされましたが、JavaScriptでオブジェクトとして参照すると同じ結果が得られます。あなたの 'render:function()...'関数で 'console.log(data);'が返るのは何ですか? – War10ck

+0

こんにちは、ありがとう。 [オブジェクト、オブジェクト] を出力します。var json = JSON.stringify(data); \t \t \t \t \t var date = JSON.parse(json); console.log( "json:" + json + "date:" + data); 出力: \t \t \t \t \t JSON:{ "年":1989、 "月":1、 "日":10}日付:[オブジェクトのオブジェクト] – Surinder

答えて

0

が、私はそれを解決し 以下は私のjQueryのコードです。 LocalDateのシリアライズ/デシリアライゼーションを実装するためにcodehausからSimpleModuleを拡張する必要がありました。以下は私のコードです:

public class LocalDateSimpleModule extends SimpleModule{ 

    public LocalDateSimpleModule(String name, Version version) { 
     super(name, version); 
     addSerializer(LocalDate.class, new JsonSerializer<LocalDate>() { 
      @Override 
      public void serialize(LocalDate value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException { 
       ToStringSerializer.instance.serialize(value, jgen, provider); 
      } 
     }); 
     addSerializer(LocalDateTime.class, new JsonSerializer<LocalDateTime>() { 
      @Override 
      public void serialize(LocalDateTime value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException { 
       ToStringSerializer.instance.serialize(value, jgen, provider); 
      } 
     }); 
     addDeserializer(LocalDate.class, new JsonDeserializer<LocalDate>() { 
      @Override 
      public LocalDate deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException { 
       return LocalDate.parse(jp.getText()); 
      } 
     }); 
     addDeserializer(LocalDateTime.class, new JsonDeserializer<LocalDateTime>() { 
      @Override 
      public LocalDateTime deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException { 
       return LocalDateTime.parse(jp.getText()); 
      } 
     }); 
    } 
} 

登録このモジュールは、サーブレット・springs.xml

<bean id="objectMapper" class="org.codehaus.jackson.map.ObjectMapper"/> 

<bean name="localDateModule" class="packge.LocalDateSimpleModule"> 
    <constructor-arg name="name" value="LocalDateModule" /> 
    <constructor-arg name="version" ref="version" /> 
</bean> 
<bean name ="version" class="org.codehaus.jackson.Version"> 
    <constructor-arg value="1"/>//some value 
    <constructor-arg value="1"/> 
    <constructor-arg value="1"/> 
    <constructor-arg value=" "/> 
</bean> 
関連する問題