2013-07-01 3 views
3

본질적으로 개체 유형에 대한 클래스 정의 인 마스터 열거 형 클래스가 있습니다. 그린을 255 :@RequestBody를 사용하여 JSON을 Enum 형식으로 변환

public enum ColorDefinition 
{ 
    private String abbrev; 
    private String color; 
    private Class colorClass; 
    RED("RD", "Red", Red.class), 
    GREEN("GN", "Green", Green.class), 
    BLUE("BL", "Blue", Blue.class).... 
} 

나는 몸과 같은
{레드에 매핑을 전송하는 자바 스크립트 모델에서 POST 요청을 설정하는 것을 시도하고있다 : 예를 들면 그것은 아래의 예와 같이 보입니다 0 블루 : 0}

@RequestMapping(value = "v1/color/EnableColors", method = RequestMethod.POST) 
@ResponseBody 
public ResponseObject enableColors(@RequestBody Map<ColorDefinition, Integer> colorMapping) 

어느 나는 다음과 같은 오류 메시지 얻기 위해 사용하는 스프링 제어 엔드 포인트

:
는 문자열 "레드"에서 형 ColorDefinition의지도 키를 구성 할 수 없음을 :하지 않는 유효한 다시 프레젠테이션 : ColorDefinition 유형의 Map 키를 String "Red"에서 생성 할 수 없습니다. Enum 클래스의 값 중 하나가 아닙니다.

여기서 잘못된 것은 무엇입니까? 들어오는 enum 값을 제대로 변환하려면 enum 클래스에 다른 메소드가 필요합니까? 열거 형에서 다른 값을 사용해야하는 것일까? (나는 그들을 성공시키지 않았다)? 어떤 도움을 주시면 감사하겠습니다. 들어오는 값을 자동으로 변환 할 수 있어야합니다. 알아낼 수 없습니다!

+0

당신은 해결 방법을 찾을 수 있었습니까? 나는 비슷한 문제가있어서 어떻게해야할지 모르겠다. – ion20

답변

3

오류 메시지는 무엇이 잘못되었는지 설명합니다. Red에 대한 정의가 ColorDefinition 안에 없습니다. 사례가 일치해야합니다. enum 값은 대소 문자를 구분합니다. JSON의 키는 RED, GREENBLUE이어야합니다.

내부적으로 스프링은 valueOf을 사용하여 문자열의 열거 형 표현을 가져옵니다. 비 직렬화 중에 Red에 대한 정의가 없기 때문에 IllegalArgumentExceptionColorDefinition에 있기 때문에 ColorDefinition.valueOf("Red")이 발생합니다. 이 예외는 Spring에 의해 가로 채기 때문에 오류 메시지가 표시됩니다. 그러나 에 대한 정의가 ColorDefinition에 있기 때문에 ColorDefinition.valueOf("RED")ColorDefinition.RED을 반환합니다. 당신이 혼합 된 경우 (레드)를 처리해야하는 경우

+0

더 많은 설명을 해 주셔서 감사합니다. –

0

,이 같은 작업을 수행 할 수 있습니다

public static class MyConverter extends PropertyEditorSupport { 
    @Override 
    public void setAsText(String text) throws IllegalArgumentException { 
     setValue(ColorDefinition.valueOf(text.toUpperCase())); 
    }  
    } 

    @InitBinder 
    public void initBinder(WebDataBinder binder) 
    { 
    binder.registerCustomEditor(ColorDefinition.class, new MyConverter()); 
    } 
+0

제대로 작동하지 못했습니다 ... Path/Param 변수에만 적용되고 본체에는 적용되지 않을 수 있습니까? – JLove

관련 문제