Spring REST:DTO作为参数 - 值不是urldecoded

时间:2017-05-27 07:20:23

标签: spring rest spring-mvc spring-restcontroller

我有一个带有RequestMapping的REST控制器,如下所示:

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

并称之为:/data/search?name=some%20value&....

searchParameters 已填充,但这些值未被urldecoded。因此,不要将searchParameter的属性name设置为&#34;某些值&#34;它是&#34;一些%20value&#34;。我如何指示Spring对这些值进行urldecode?

2 个答案:

答案 0 :(得分:1)

一种可能的解决方案是使用Map并将其名称静态存储在类中,例如:

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

或使用Map构建Object SearchParameters:

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

答案 1 :(得分:0)

好的,问题实际上不是解码,而是编码。它是在测试用例中编码的,尽管它不需要。因此,看起来像/data/search?name=some%20value的网址应该是/data/search?name=some value的实际空格。