복붙노트

[SPRING] Spring MVC에서 UUID 바인딩하기

SPRING

Spring MVC에서 UUID 바인딩하기

Spring MVC에서 UUID를 바인딩하는 가장 쉬운 방법은 다음과 같습니다.

@RequestMapping("/MyController.myAction.mvc")
@ResponseBody
public String myAction(UUID id, String myParam)...

위의 방법을 사용하면 다음 예외가 발생합니다.

org.springframework.beans.BeanInstantiationException: 
Could not instantiate bean class [java.util.UUID]: 
No default constructor found; 
nested exception is java.lang.NoSuchMethodException: java.util.UUID.<init>()

이렇게 주변에 스커트가있는 다른 질문이 있지만 아무도 대답하지 않는 것 같습니다. 나는 봄 3.latest (실제로 4 EA)를 사용하고있다. 나는 이것을 달성하기위한 최신의 가장 단순한 방법을 연구하고있다.

해결법

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

    1.UUID는 단순히 인스턴스화할 수없는 클래스입니다. 요청 매개 변수로 제공된다고 가정 할 때 먼저 @RequestParam을 사용하여 인수에 주석을 추가해야합니다.

    UUID는 단순히 인스턴스화할 수없는 클래스입니다. 요청 매개 변수로 제공된다고 가정 할 때 먼저 @RequestParam을 사용하여 인수에 주석을 추가해야합니다.

    @RequestMapping("/MyController.myAction.mvc")
    @ResponseBody
    public String myAction(@RequestParam UUID id, String myParam)...
    

    이제 요청에 사용할 수있는 id라는 이름의 요청 매개 변수가 필요합니다. 매개 변수가 UUID로 변환됩니다. 그러나 현재로서는 문자열에서 UUID로 변환 할 수있는 것이 없기 때문에이 작업은 실패합니다.

    이를 위해 이것을 할 수있는 변환기를 만드십시오.

    public class StringToUUIDConverter implements Converter<String, UUID> {
        public UUID convert(String source) {
            return UUID.fromString(source);
        }
    }
    

    이 클래스를 ConversionService에 연결하면 요청 매개 변수에 대한 UUID 변환이 있어야합니다. (이는 기본적으로 ConversionService를 사용하는 모든 것에 대한 요청 헤더 인 경우에도 작동합니다.) 당신은 또한 다른 방향 (UUID -> 문자열)에 대한 변환기를 갖고 싶어 할 수도 있습니다.

    Spring MVC에 연결하는 것은 참조 가이드 (xml config를 사용한다고 가정)에서 잘 설명되어있다. 그러나 간단히 말해서 :

    <mvc:annotation-driven conversion-service="conversionService"/>
    
    <bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
        <property name="converters">
            <set>
                <bean class="org.company.converter.StringToUUIDConverter"/>
            </set>
        </property>
    </bean>
    

    참고 : Spring 3.2 Spring에서 StringToUUIDConverter가 추가되어 자동으로 등록됩니다.

  2. ==============================

    2.아래의 변환기는 버전 3.2부터 스프링 프레임 워크 (코어)에서 사용할 수 있습니다.

    아래의 변환기는 버전 3.2부터 스프링 프레임 워크 (코어)에서 사용할 수 있습니다.

    org.springframework.core.convert.support.StringToUUIDConverter<String, java.util.UUID>
    
  3. ==============================

    3.Header 매개 변수로 사용할 경우

    Header 매개 변수로 사용할 경우

    @RequestHeader(value="UUID") String id
    

    모델에 들어 오면

    @ModelAttribute(value="ModelName") Entity modelName
    
  4. from https://stackoverflow.com/questions/20366304/bind-uuid-in-spring-mvc by cc-by-sa and MIT license