2016-01-07 57 views
0

我要求getAllDevelopers使用Swagger API進行指導和響應內容類型爲「application/json」。我爲我的開發實體的結果是,像這樣:JHipster getAllEntities的內容類型API

[ 
    Developer{id=1001, name='David L. Whitehurst'}, 
    Developer{id=1002, name='Matt Raible'}, 
    Developer{id=1003, name='Eugene Cuirana'}, 
    Developer{id=1004, name='Ryan Hoegg'}, 
    Developer{id=1005, name='Don Brown'}, 
    Developer{id=1006, name='Harry Houdini'}, 
    Developer{id=1007, name='Howie Mandell'} 
] 

當我運行這個或檢查它在jsonlint.com它說的是不是有效的JSON。我發現這使用Jersey客戶端來提出針對API的請求。我將JSON對象映射到POJO。我得到一個反序列化錯誤。

響應是否應該是有效的JSON?

回答

0

這個迴應是無效的JSON,因爲你猜對了。 它應該是這樣的:

[ 
    {"id":1001, "name":"David L. Whitehurst"}, 
    {"id":1002, "name":"Matt Raible"}, 
    {"id":1003, "name":"Eugene Cuirana"}, 
    {"id":1004, "name":"Ryan Hoegg"}, 
    {"id":1005, "name":"Don Brown"}, 
    {"id":1006, "name":"Harry Houdini"}, 
    {"id":1007, "name":"Howie Mandell"} 
] 

你的反應似乎是在List<Developer>一個toString()

Developer實體的JHipster頁面是否按預期工作? 如果是這樣,你應該在瀏覽器的控制檯中看到真正的JSON響應,並比較請求。

+0

生成的代碼工作正常。我會仔細檢查一切,如果需要更正,我會看看我是否可以修復或解決問題。謝謝。 –

0

這是我的RestController的一個臨時解決方案,它產生有效的JSON,但是,代碼實際上是由Yeoman生成的,我想了解一個貢獻者想要如何修復它。我會創建這個問題,我可能會嘗試修復它,但在我面前有一個Yeoman學習曲線。此外,新的響應JSON在Java代碼之後。

/** 
    * GET /developers -> get all the developers. 
    */ 
    @RequestMapping(value = "/developers", 
    method = RequestMethod.GET, 
    produces = MediaType.APPLICATION_JSON_VALUE) 
    @Timed 
    public ResponseEntity<List<JSONObject>> getAllDevelopers(Pageable pageable) 
     throws URISyntaxException, JSONException { 
     log.debug("REST request to get a page of Developers"); 
     Page<Developer> page = developerRepository.findAll(pageable); 
     HttpHeaders headers = PaginationUtil.generatePaginationHttpHeaders(page, "/api/developers"); 

     // dlwhitehurst quick-fix, this is Yo-generated code 

     List<JSONObject> developers = new ArrayList<JSONObject>(); 
     for (Developer n : page.getContent()) { 
      JSONObject entity = new JSONObject(); 
      try { 
       entity.put("id", n.getId()); 
       entity.put("name", n.getName()); 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 

      developers.add(entity); 
     } 
     return new ResponseEntity<List<JSONObject>>(developers, headers, HttpStatus.OK); 
    } 

改性JSON響應(有效)

[{ 
    "name": "David L. Whitehurst", 
    "id": 1001 
}, { 
    "name": "Matt Raible", 
    "id": 1002 
}, { 
    "name": "Eugene Cuirana", 
    "id": 1003 
}, { 
    "name": "Ryan Hoegg", 
    "id": 1004 
}, { 
    "name": "Don Brown", 
    "id": 1005 
}, { 
    "name": "Harry Houdini", 
    "id": 1006 
}, { 
    "name": "Howie Mandell", 
    "id": 1007 
}] 
+0

這不是你應該做的,你不應該在你的控制器中使用JSONObject,JSON序列化是Jackson的責任。如果您得到錯誤的回覆,可能是因爲您發錯了請求。如果您在JHipster應用程序中轉到api文檔頁面,則會看到要使用的curl命令選項。 –

+0

你是對的。我已經在最初使用CURL的終端上測試過,並且它一定是正確的。我註釋了我與傑克遜結束,我的Jersey客戶端請求必須以某種方式導致響應(在我運行的JHipster應用程序終端中)以某種方式用「開發人員」加上JSON對象的前綴。我不確定我是如何從Spring啓動應用程序的Rest控制器中獲得JSON的,這樣才能真正發送。 –