1、自定义方法参数注解
@Target(ElementType.PARAMETER) @Retention(RetentionPolicy.RUNTIME) public @interface CommonObject { String value(); }
2、自定义参数解析器
@Slf4j public class CommonObjectArgumentResolver implements HandlerMethodArgumentResolver { @Override public boolean supportsParameter(MethodParameter parameter) { return parameter.hasParameterAnnotation(CommonObject.class); } @Override public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception { HttpServletRequest request = webRequest.getNativeRequest(HttpServletRequest.class); Map<String, String[]> params = request.getParameterMap(); Object requestObject = JSON.parseObject(JSON.toJSONString(params), parameter.getParameterType()); return requestObject; } }
3、注册参数解析器
@Configuration public class LocalWebMvcConfiguration extends WebMvcConfigurationSupport { @Override public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) { argumentResolvers.add(new CommonObjectArgumentResolver()); } @Override protected void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/**").addResourceLocations("classpath:/static/"); // 解决swagger无法访问 registry.addResourceHandler("/swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/"); // 解决swagger的js文件无法访问 registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/"); } }
4、Controller
@Controller @RequestMapping("/common/") @Api(tags = "DEMO", produces = "application/json") @Slf4j public class CommonRequestHandler { @RequestMapping(value = "userlogin") @ApiOperation(value = "用户登陆", httpMethod = "POST", notes = "用户登陆") @ResponseBody public String userLogin(@CommonObject("userInfo") UserInfoDTO userInfoDTO) { log.info("user -> {}", userInfoDTO); return "succeed"; } }