Controller 인덱스 간소화(HandlerMethodArgumentResolver)
8135 단어 코드 간소화
간단한 매개 변수 검사는 일반적으로 대상의 변수가 비어 있지 않고 길이가 제한되어 있음을 가리키며, 다른 글을 참고할 수 있습니다: @Validated 매개 변수 검사를 간소화할 수 있습니다
추천 읽기:HandlerMethodArgumentResolver의 간단한 사용
핵심:
HandlerMethodArgumentResolver
해상도, 기능: Request 요청 파라미터를 분석하고 데이터를 Controller에 연결하는 인삼핵심:
HandlerMethodArgumentResolver
인터페이스addArgumentResolvers
HttpServletRequest、Model
에 주입될 수 있는 것도 이 원리이다사용자 정의 메소드 매개변수 파서
HandlerMethodArgumentResolver
인터페이스에 두 가지 방법이 있습니다.public interface HandlerMethodArgumentResolver {
boolean supportsParameter(MethodParameter parameter);
Object resolveArgument(MethodParameter parameter,
ModelAndViewContainer mavContainer,
NativeWebRequest webRequest,
WebDataBinderFactory binderFactory)
throws Exception;
}
방법1:
supportsParameter
boolean supportsParameter(MethodParameter parameter);
명의를 보고 매개 변수가 목표류인지 아닌지를 판단한다.네,true로 돌아가야 다른 방법으로 처리됩니다.
일반적으로 두 가지 프로세스가 있습니다.
Class<?> clazz = parameter.getParameterType();
return clazz == xxx.class;
//clazz.isAssignableFrom(xxx.class);
//clazz instanceof xxx.class ...
에 따라 첨부: isAssignableFrom()와 instanceof의 차이boolean res = parameter.hasParameterAnnotation(xxx.class);
return res;
eg: 클래스 a에 따라 판단하지만 각
Controller
마다 판단하는 것이 아니라면 주해 b를 사용자 정의하고 판단을 추가합니다.return parameter.getParameterType().isAssignableFrom(a.class)
&& parameter.hasParameterAnnotation(b.class);
방법2.
resolveArgument
Object resolveArgument(MethodParameter parameter,
ModelAndViewContainer mavContainer,
NativeWebRequest webRequest,
WebDataBinderFactory binderFactory)
throws Exception;
이 방법의 매개 변수 중 비교적 많이 사용하는 것은
webRequest
인데 구체적인 Request
류를 획득하여 매개 변수를 얻는다.더 나아가 판단하다.(다른 매개 변수는 필자도 잘 모르고 관련 자료도 검색하지 못하면 반문에서 도끼질하지 않는다.)HttpServletRequest request = webRequest.getNativeRequest(HttpServletRequest.class);
HttpServletResponse response = webRequest.getNativeResponse(HttpServletResponse.class);
request.getParameter(xxx);
구성에 추가
@Configuration
public class WebConfig extends WebMvcConfigurerAdapter{
// HandlerMethodArgumentResolver ,
// , @Autowired, spring ,@Component、@Service
@Autowired
UserArgumentResolver userArgumentResolver;
@Override
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
//
argumentResolvers.add(userArgumentResolver);
}
}
핵심은
addArgumentResolvers
방법이다.반드시 이 부류를 계승하는 것이 아니라 다른 부류도 이 방법이 있다. 예를 들어
WebMvcConfigurationSupport
이런 방법은 비교적 완전하다.자세한 사용법과 사례는 참고할 수 있습니다:HandlerMethodArgumentResolver는 현재 로그인 사용자를 통일적으로 얻는 데 사용됩니다.
참고 자료:
Spring 사용자 정의argumentResolver 매개변수 파서
본문 이 끝나면 잘못 지적한 것 을 환영합니다