복붙노트

[SPRING] 요청 매개 변수를위한 커스텀 Spring 애노테이션

SPRING

요청 매개 변수를위한 커스텀 Spring 애노테이션

주석에 따라 Spring 요청이나 경로 매개 변수를 수정하는 커스텀 주석을 작성하고 싶습니다. 예를 들어 다음 코드 대신 :

@RequestMapping(method = RequestMethod.GET)
public String test(@RequestParam("title") String text) {
   text = text.toUpperCase();
   System.out.println(text);
   return "form";
}

주석을 달 수 있습니다. @UpperCase :

@RequestMapping(method = RequestMethod.GET)
   public String test(@RequestParam("title") @UpperCase String text) {
   System.out.println(text);
   return "form";
}

그것이 가능하고 가능하면 어떻게 할 수 있습니까?

해결법

  1. ==============================

    1.사람들이 주석에서 말했듯이 주석 중심의 사용자 정의 해결자를 쉽게 작성할 수 있습니다. 4 단계,

    사람들이 주석에서 말했듯이 주석 중심의 사용자 정의 해결자를 쉽게 작성할 수 있습니다. 4 단계,

    @Target(ElementType.PARAMETER)
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    public @interface UpperCase {
        String value();
    }
    
    public class UpperCaseResolver implements HandlerMethodArgumentResolver {
    
        public boolean supportsParameter(MethodParameter parameter) {
            return parameter.getParameterAnnotation(UpperCase.class) != null;
        }
    
        public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest,
                WebDataBinderFactory binderFactory) throws Exception {
            UpperCase attr = parameter.getParameterAnnotation(UpperCase.class);
            return webRequest.getParameter(attr.value()).toUpperCase();
        }
    }
    
    <mvc:annotation-driven>
            <mvc:argument-resolvers>
                <bean class="your.package.UpperCaseResolver"></bean>
            </mvc:argument-resolvers>
    </mvc:annotation-driven>
    

    또는 자바 설정

        @Configuration
        @EnableWebMvc
        public class Config extends WebMvcConfigurerAdapter {
        ...
          @Override
          public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
              argumentResolvers.add(new UpperCaseResolver());
          }
        ...
        }
    
    public String test(@UpperCase("foo") String foo) 
    
  2. from https://stackoverflow.com/questions/30715579/custom-spring-annotation-for-request-parameters by cc-by-sa and MIT license