2016-08-23 24 views
0

存在一個解析JSON的函數,它通過Postman傳入,並用於填充對象。該對象隨後在GSON庫的幫助下作爲JSON返回。在Java/Spring應用程序中使用JSON時如何處理正斜槓?

雖然這是偉大的,將被填充的需求類的變量之一是能夠處理正斜槓(即解析/some/address並將其分配給我的類成員customer_url並返回給用戶customer_url : /some/address

這適用於任何和所有輸入,但在請求的任何位置使用/時適用。這裏有一個例子:

http://localhost:8080/myApp/myInterface/populate/someObject/{"SOME_RANDOM_FIELD_TO_EXTRACT_STUFF_FROM": "/some/address" }

,它返回一個404 NOT FOUND錯誤。

這裏是我的控制我的後端代碼,如果我可能犯了一個錯誤有作爲:

@RequestMapping(value = "/populate/someObject/{json}", method = RequestMethod.PUT, headers = "Accept=application/json", produces = { 
      "application/json; charset=UTF-8" }) 
    @ResponseBody 
    public ResponseEntity<String> getPopulateAndReturn(@PathVariable("json") String json) { 
     JsonService jsonService = new JsonService(); 
     MyClass obj = populateThis(jsonService.convertJsonInputToJsonObject(json)); 
     Gson gson = new Gson(); 
     return new ResponseEntity<String>(gson.toJson(obj), HttpStatus.OK); 
    } 

我已經看到了相關的問題,但沒有一個是能夠帶領我到一個解決方案,也不瞭解問題更好。

+5

這是...不正常。 JSON通常應作爲請求主體提供。 – chrylis

+0

@chrylis我能看的任何例子?我試圖搜索一些,但不太清楚你的意思(新手建立API以JSON格式公開數據) – abhi

+0

@chrylis明白了。謝謝你指出! – abhi

回答

0

不能相信我錯過了這一點。

所以問題在於後端功能與RequestMethod交互的方式。這是正確的功能,JSON發送到應用程序,並與它的應用程序工作,以某種方式:

@RequestMapping(value = "/populate/someObject", method = RequestMethod.PUT, headers = "Accept=application/json", produces = { 
     "application/json; charset=UTF-8" }) 
@ResponseBody 
public ResponseEntity<String> getPopulateAndReturn(@RequestBody String json) { 
    JsonService jsonService = new JsonService(); 
    MyClass obj = populateThis(jsonService.convertJsonInputToJsonObject(json)); 
    Gson gson = new Gson(); 
    return new ResponseEntity<String>(gson.toJson(obj), HttpStatus.OK); 
} 

而且其工作原理與在請求任何/(正斜槓)填充料。

@RequestBody需要用來接受JSON請求。 JSON輸入不應直接在URL中提供(謝謝您指出這一點,@chrylis)。

當使用郵差,點擊Body類別和粘貼您的JSON輸入有像這樣:

PUT request with Postman

不顧返回回對象本身,儘管使用PUT請求;想要測試並確保沒有其他事情出錯。在最佳實踐的努力下,它應該返回恰當的HttpStatus(如果我錯了,請隨時糾正我)。

相關問題