Java “请求丢失”;“错误”;添加“后的字段”;“参数”;进入@RequestMapping
为了使用相同的资源路径处理一些情况,例如: /路径/目的地/资源?参数1=a /路径/目的地/资源?参数2=a 我引入了@RequestMapping参数。现在看起来是这样的:Java “请求丢失”;“错误”;添加“后的字段”;“参数”;进入@RequestMapping,java,spring,rest,error-handling,Java,Spring,Rest,Error Handling,为了使用相同的资源路径处理一些情况,例如: /路径/目的地/资源?参数1=a /路径/目的地/资源?参数2=a 我引入了@RequestMapping参数。现在看起来是这样的: @Override @RequestMapping(value = PM_DATA_ROUTE, params = {"system", "className", "source", "fromTimestampInNanos", "toTimestampInNanos"}) public List&l
@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);
}
@覆盖
@RequestMapping(value=PM_DATA_ROUTE,params={“system”、“className”、“source”、“fromtimestinnanos”,
“toTimestampInNanos”})
公共列表getPmData(
@有效的时间戳范围pmdatarequestParameter时间戳范围pmdatarequestParameter){
LOGGER.info(请求\接收\日志,timestampRangePmDataRequestParameter);
返回pmDataManagerAdapter.getPmData(timestagrangepmdatarequestparameter);
}
@凌驾
@RequestMapping(value=PM_DATA_ROUTE,params={“system”、“className”、“source”、“fromtimestinnanos”,
“持续时间”})
公共列表getPmData(
@有效的TimestampDurationPmDataRequestParameter TimestampDurationPmDataRequestParameter){
LOGGER.info(请求\接收\日志,timestampDurationPmDataRequestParameter);
返回pmDataManagerAdapter.getPmData(timestampDurationPmDataRequestParameter);
}
这些值(如system、className等)是封装到对象请求参数中的字段名称,我希望在控制器方法签名中使用这些参数
除了一个小问题外,这很好用。如果我没有将这个“params”显式地放入@RequestParam,然后从客户端错过了一些东西,那么错误响应是有意义的,如下所示:
“错误”:[
“'timestaminnanos'参数不能忽略!”
],
消息本身来自验证。没关系
在我将此参数添加到@RequestMapping后,相同情况下的错误响应如下所示:
“异常”:“org.springframework.web.bind.unsatifiedServletRequestParameterException”,
“错误”:[]
甚至没有关于缺少参数的单词,因为在这种情况下,它甚至没有进入控制器方法(这实际上是合理的)
通常我在request的ServletRequestAttributes中查找错误,它包含errorAttributes
现在我不知道该怎么办了
有没有人知道如何在这种特殊情况下获得关于缺少参数的更有意义的消息
我知道,如果我们不使用所需的方法,然后跳转到默认的错误处理控制器-可能很难说什么,但另一方面-像这样的API并不少见,所以可能有一些很好的实践来处理这种情况
提前谢谢