Spring MVC - 是否可以在GET上接收强类型请求对象?

时间:2013-02-07 00:44:41

标签: java spring spring-mvc

我有一个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)

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

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

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

1 个答案:

答案 0 :(得分:2)

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

这有效:

@RequestMapping(method=RequestMethod.GET)
public @ResponseBody List<Result> search(SearchRequest request) {}