无论JAX-RS @QueryParam
也不春天@RequestParam
支持您的需求,即将多个请求参数名称映射到同一个变量。 我建议不要这样做,因为它会很难支持,因为混淆如哪个参数来自哪个客户端。如果你真的想处理这个问题((因为你不能改变来自第三方的URL,同意很久以后),那么另一种方法是利用HandlerMethodArgumentResolver
这有助于传递我们自己的请求参数(像@MyRequestParam
)像如图中下面的代码的控制器的方法:
Controller类:
@Controller
public class MyController {
@RequestMapping(value="/xyz")
public void train1(@MyRequestParam String postcode) {//custom method argument injected
//Add your code here
}
}
MyRequestParam:
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.PARAMETER)
public @interface MyRequestParam {
}
HandlerMethodArgumentResolver实现类:
public class MyRequestParamWebArgumentResolver implements HandlerMethodArgumentResolver {
@Override
public Object resolveArgument(MethodParameter parameter,
ModelAndViewContainer mavContainer,
NativeWebRequest webRequest,
WebDataBinderFactory binderFactory) {
MyRequestParam myRequestParam =
parameter.getParameterAnnotation(MyRequestParam.class);
if(myRequestParam != null) {
HttpServletRequest request =
(HttpServletRequest) webRequest.getNativeRequest();
String myParamValueToBeSentToController = "";
//set the value from request.getParameter("postal_code")
//or request.getParameter("postalCode")
return myParamValueToBeSentToController;
}
return null;
}
@Override
public boolean supportsParameter(MethodParameter parameter) {
return (parameter.getParameterAnnotation(MyRequestParam.class) != null);
}
}
WebMvcConfigurerAdapter类:
@Configuration
class WebMvcContext extends WebMvcConfigurerAdapter {
@Override
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
argumentResolvers.add(new MyRequestParamWebArgumentResolver());
}
}
你为什么做 “Ruby用户” 的代码更复杂bacause。 Api应该是客户端独立的。 – dit