Spring扩展接口

 spring  spring  spring-boot


HandlerMethodArgumentResolver

通过扩展HandlerMethodArgumentResolver的方式,实现参数的自定义解析。

public class CustomResolver implements HandlerMethodArgumentResolver {
    @Override
    public boolean supportsParameter(MethodParameter parameter) {
        return parameter.hasParameterAnnotation(RequestBody.class) && ParamName.class.isAssignableFrom(parameter.getParameterType());
    }
}

@Configuration
public class WebConfig implements WebMvcConfigurer {

    @Autowired
    private CustomResolver customResolver;

    @Override
    public void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) {
        resolvers.add(customResolver);
    }
}

重写WebMvcConfigurer接口的addArgumentResolvers方法,接口注释该接口不会覆盖内置的参数解析器, 如果需要重制内置的解析器,必须设置RequestMappingHandlerAdapter接口。 Alt text

RequestMappingHandlerAdapter

通过RequestMappingHandlerAdapter#setCustomArgumentResolvers将添加自定义的参数解析器。 Alt text

参数解析器的初始化过程是通过RequestMappingHandlerAdapter#afterPropertiesSet的方法来实现的。 注意⚠️:自定义解析器是追加在内建解析器的后面的。 Alt text Alt text Alt text