2017-08-15 34 views
0

我使用的是春天boot.My項目開發REST API的服務與領域超車點對象爲@RequestBody

import com.vividsolutions.jts.geom.Point; 
@Column(columnDefinition = "Point", name = "lon_lat") 
    private Point lonLat; 
@Column(name = "address") 
private String address; 

一個名爲洗車實體類這是我的控制器方法

@RequestMapping(value = "owner/carWashs", method = RequestMethod.POST, produces = "application/json;charset=UTF-8") 


@ResponseBody 
    public ResponseEntity<String> createCarWash(@RequestParam(value = "sid", required = true, defaultValue = "") String sid, 
               @RequestBody CarWash carWash) throws TimeoutException, SocketTimeoutException, SocketException { 
     final Integer id = checkSession(sid); 
     System.out.println(carWash.getLonLat()); 
     System.out.println(carWash.getAddress()); 
     return ResponseEntity.ok(createCarWashLogic(carWash)); 
    } 

當我稱這種方法使用這個json {"address":"qwerty"}它工作正常。 問題是我如何將lonLat屬性添加到請求正文中,以便傑克遜能夠將其解析爲POINT對象?

+0

採用嵌入式JSON對象包含 –

+0

創建洗車類的實例,並使用傑克遜序列化。如果您不喜歡默認設置,您可以使用自定義編組器來處理您無法控制的類。 –

回答

0

假設你有一個

class Point{ String attribute1; String attribute2; }

送洗車JSON像

{ "address":"qwerty", "lonLat" : { "attribute1":"value", "attribute2":"value" } }

和傑克遜將設置相應的屬性值。

+0

我lonLat作爲進口com.vividsolutions.jts.geom.Point類的一個對象,如果寫{ 「lonLat」:{ \t 「×」:32, 「Y」:43 }}它給我jsonParse例外 –

+0

根據我的說法,對於默認的jackson解析,它必須有一個默認的構造函數和公共setter,用於類的屬性或者屬性必須是公共的。而且我可以看到Point類,它只是有一個構造函數打開來設置座標,並且也是座標對象的形式。因此,您可能必須從json獲取該座標,將其映射到自定義的用戶定義的類中,然後使用其構造函數手動將其設置爲Point類。 –

+0

我添加lon,lat字段到我的類和用戶本地sql腳本創建POINT lonLat對象 –

0

class有一個字段的CoordinateSequence座標,那場具有場INT X,詮釋Y,INT Z,INT中號。所以,你的JSON字符串應該是這樣的:

與各界Point對象
{ 
    "address": "some address", 
    "lonLat": { 
    "coordinates": { 
     "X": 123, 
     "Y": 123, 
     "Z": 123, 
     "M": 123, 
    } 
    } 
} 
+0

謝謝你的迴應,但我試過這種方式,JsonFormat異常 –

+0

@АлмасАбдразак是我的答案類中的鏈接類你用?你是否從我的答案中複製了json字符串?如果您從答案中複製我忘記了關閉括號(我現在糾正了它),您可以再試一次嗎?如果不是你使用的課程,你可以分享** Point **課程的鏈接 – barbakini