2017-05-27 48 views
0

我有一個RequestMapping看起來像這樣一個REST控制器:彈簧安置:DTO作爲參數 - 值不urldecoded

@RequestMapping(method = RequestMethod.GET) 
public List<MyDTO> search(SearchParameters searchParameters) { 
     // ... 
} 

,並調用它像:/data/search?name=some%20value&....

searchParameters人口,但值不是urldecoded。因此,不是將searchParameter的屬性name設置爲「某個值」,而是「某些%20值」。我如何指示Spring對這些值進行url解碼?

+1

爲什麼不爲每個請求參數使用'@RequestParam(「yourparametername」)String yourparameter'而不是DTO,這被證明是可行的。 –

+0

大約有15個搜索參數,寫出來後很難讀,很難讀。 – user1068464

+0

請參閱:https://stackoverflow.com/questions/2632175/decoding-uri-query-string-in-java,或查看我的答案下面的替代解決方案。 –

回答

1

一個可能的解決方案是使用一個地圖,並具有存儲靜態類中的他們的名字,如:

@RequestMapping(method = RequestMethod.GET) 
public List<MyDTO> search(@RequestParam Map<String,String> parameters) { 
     String name = parameters.get(SearchParameters.NAME); 
// ... 
} 

或使用地圖上建立對象SearchParameters:

@RequestMapping(method = RequestMethod.GET) 
    public List<MyDTO> search(@RequestParam Map<String,String> parameters) { 
      SeachParameters searchParameters = new SearchParameters(parameters); 
    // ... 
    } 
+0

這不會改變我的事情。地圖看起來完全像DTO,即它不能正確解碼事物。 – user1068464

0

好吧,問題實際上不是解碼,而是編碼。它被編碼在一個測試用例中,儘管它不需要。因此,看起來像/data/search?name=some%20value的網址實際上應該是/data/search?name=some value