0

我有一个 Spring MVC 控制器,它为 GET 请求提供服务,以执行搜索。

这些请求有许多可以在查询字符串上传递的可选参数。

例如:

@Data
public class SimpleSearchRequest implements SearchRequest {

    private String term;
    private List<Status> stati;
    @JsonDeserialize(using=DateRangeDeserializer.class)
    private Range<DateTime> dateRange;  
}

如果我为此使用 POST 或 PUT,我可以使用@RequestBody. 但是,因为我使用的是 GET,所以这似乎不合适。

相反,似乎我需要将方法签名上的所有可能参数列出为@RequestParam(required=false).

除了导致丑陋的方法签名之外,我还因为不在这里使用类而失去了各种面向对象的优点。

尝试使用@RequestBody失败(可以理解),正如这里这里所讨论的,在 GET 上使用实际的请求正文是不可取的。

有没有办法让 Spring MVC 支持将多个@RequestParam's 编组为 GET 请求上的强类型对象?

4

1 回答 1

2

似乎答案是简单地删除注释。

这有效:

@RequestMapping(method=RequestMethod.GET)
public @ResponseBody List<Result> search(SearchRequest request) {}
于 2013-02-07T01:49:15.423 回答