将“params”添加到@RequestMapping

时间:2015-11-03 15:25:58

标签: java spring rest error-handling

为了处理具有相同资源路径的一些情况,例如:

/路径/到/资源?参数1 =一个

/路径/到/资源?param2的= A

我介绍了@RequestMapping参数。现在看起来像这样:

@Override
@RequestMapping(value = PM_DATA_ROUTE, params = {"system", "className", "source", "fromTimestampInNanos", 
        "toTimestampInNanos"})
public List<PmDataInformationWrapper> getPmData(
        @Valid TimestampRangePmDataRequestParameter timestampRangePmDataRequestParameter) {
    LOGGER.info(REQUEST_RECEPTION_LOG, timestampRangePmDataRequestParameter);
    return pmDataManagerAdapter.getPmData(timestampRangePmDataRequestParameter);
}

@Override
@RequestMapping(value = PM_DATA_ROUTE, params = {"system", "className", "source", "fromTimestampInNanos", 
        "durationInNanos"})
public List<PmDataInformationWrapper> getPmData(
        @Valid TimestampDurationPmDataRequestParameter timestampDurationPmDataRequestParameter) {
    LOGGER.info(REQUEST_RECEPTION_LOG, timestampDurationPmDataRequestParameter);
    return pmDataManagerAdapter.getPmData(timestampDurationPmDataRequestParameter);
}

这些值如system,className等 - 是封装到对象请求参数中的字段的名称,我期望在控制器方法签名中使用。

除了一个小问题外,这个工作正常。如果我没有将这个“params”明确地放入@RequestParam然后从客户端丢失一些东西 - 错误响应是有意义的,看起来像这样:

  

“错误”:[       “'timestampInNanos'参数不能省略!”     ],

消息本身来自验证。没关系。

我将这个参数添加到@RequestMapping后,同样情况的错误响应如下所示:

  

“exception”:“org.springframework.web.bind.UnsatisfiedServletRequestParameterException”,     “错误”:[]

关于缺失的参数,甚至没有单词,因为在这种情况下它甚至没有进入控制器方法(这实际上是合理的)。

通常我在查询请求的ServletRequestAttributes中的错误,其中包含errorAttributes。

现在我不知道该怎么做。

在这种特殊情况下,有没有人有一些想法如何获得关于缺失参数的更有意义的信息?

我知道如果我们不进入所需的方法,然后只是跳转到默认的错误处理控制器 - 它可能很难说什么,但另一方面 - 像这样的API并不罕见,所以如何处理这种情况可能有一些好的做法......

提前致谢!

0 个答案:

没有答案