Spring MVC - 如何检查没有传递意外的查询字符串参数?

Max*_*eev 8 java validation spring 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
    }
Run Code Online (Sandbox Code Playgroud)

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

UPDATE

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

非常感谢

格言

sin*_*pop 5

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