Spring MVC-如何检查是否未传递意外的查询字符串参数?


问题内容

我有一个用Spring MVC编写的Web服务。第三方开发人员可以使用它。我们的方法有很多 可选 参数(在查询字符串中传递)。

我想确保所有查询字符串参数的拼写正确并且没有错字。有一个简单的方法吗?方法签名示例:

 @RequestMapping(value = {"/filter"}, method = RequestMethod.GET)
    @ResponseBody
    public List<MetricType> getMetricTypes(    
            @RequestParam(value = "subject", required = false) Long subjectId,
            @RequestParam(value = "area", required = false) Long areaId,
            @RequestParam(value = "onlyImmediateChildren", required = false) Boolean onlyImmediateChildren,   
            @RequestParam(value = "componentGroup", required = false) Long componentGroupId    
            ) throws Exception
    {
        //Some code
    }

如果有人用“ onlyImediateChildren = true”参数(一个错字)而不是“ onlyImmediateChildren =
true”调用此方法,Spring MVC将忽略该错字参数,并假定“
onlyImmediateChildren”为空。开发人员将获得稍微不正确的结果列表,并且不会注意到该错误。这样的问题可能很普遍,很难诊断。我想检查查询字符串中是否没有拼写错误的参数以防止此类问题。

更新

可以从查询字符串中提取实际参数列表。然后可以将其与允许的参数列表进行比较。如果我对允许的参数列表进行硬编码,它将复制方法签名。我想知道是否容易从方法签名中提取允许的参数列表(例如,通过@RequestParam批注)?

非常感谢

格言


问题答案:

您可以实现自己的HandlerInterceptor。在preHandle方法中,您可以获得以@RequestParameter注释的所有HandlerMethod的参数。这些将是请求中所有允许的参数。