我可以推荐的一种解决方法是创建您自己的HandlerMethodArgumentResolver并触发此 HandlerMethodArgumentResolver 以针对特定参数执行 - 例如通过创建名为 JsonArgument 的注释,使用 @JsonArgument 注释这些参数 -
@Override
public boolean supportsParameter(MethodParameter methodParameter) {
if (methodParameter.getParameterAnnotation(JsonArgument.class)!=null) return true;
现在,在这个 HandlerMethodArgumentResolver 中,您可以获取特定的请求参数值(例如 Json 字符串)并将其转换为所需的类型。
@Override
public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mav, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {
...
jsonString = webRequest.getParameter(parameterName);
Class<?> type = methodParameter.getParameterType();
//Convert jsonString to object of appropriate type..
这样,您的更改将高度集中在您已注释的类型上。