[SPRING] @RequestBody를 사용하여 JSON을 Enum 유형으로 변환
SPRING@RequestBody를 사용하여 JSON을 Enum 유형으로 변환
기본적으로 객체 유형에 대한 클래스 정의 인 마스터 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)....
}
Javascript 모델에서 게시 요청을 설정하려고합니다.이 모델은 다음과 같이 몸체에 매핑을 보냅니다. {빨간색 : 255, 녹색 : 0, 파란색 : 0} 스프링 제어 엔드 포인트에
@RequestMapping(value = "v1/color/EnableColors", method = RequestMethod.POST)
@ResponseBody
public ResponseObject enableColors(@RequestBody Map<ColorDefinition, Integer> colorMapping)
내가 다음과 같은 오류 메시지가 나타납니다 : String "Red"에서 ColorDefinition 유형의 Map 키를 만들 수 없습니다. 유효한 표현이 아닙니다 : ColorDefinition 유형의 Map 키를 작성할 수 없습니다. String "Red": Enum 클래스의 값 중 하나가 아닙니다. 여기서 내가 뭘 잘못하고 있니? 들어오는 enum 값을 제대로 변환하려면 enum 클래스에 다른 메소드가 필요합니까? 열거 형에서 다른 값을 사용해야합니까? (나는 성공하지 못했습니다)? 어떤 도움을 주시면 감사하겠습니다. 자동으로 수신되는 값을 변환 할 수 있어야합니다. 알아낼 수 없습니다!
해결법
-
==============================
1.오류 메시지는 무엇이 잘못되었는지 설명합니다. ColorDefinition 내부에 빨간색 정의가 없습니다. 사례가 일치해야합니다. 열거 형 값은 대소 문자를 구분합니다. JSON의 키는 RED, GREEN 및 BLUE이어야합니다.
오류 메시지는 무엇이 잘못되었는지 설명합니다. ColorDefinition 내부에 빨간색 정의가 없습니다. 사례가 일치해야합니다. 열거 형 값은 대소 문자를 구분합니다. JSON의 키는 RED, GREEN 및 BLUE이어야합니다.
내부적으로 Spring은 valueOf를 사용하여 String의 enum 표현을 가져옵니다. deserialization하는 동안 ColorDefinition.valueOf ( "Red")는 ColorDefinition에 Red에 대한 정의가 없기 때문에 IllegalArgumentException을 발생시킵니다. 이 예외는 Spring에 의해 가로 채기 때문에 오류 메시지가 표시됩니다. 그러나 ColorDefinition.valueOf ( "RED")는 ColorDefinition에 RED에 대한 정의가 있으므로 ColorDefinition.RED를 반환합니다.
-
==============================
2.대소 문자를 혼합하여 처리해야하는 경우 (Red) 다음과 같이 할 수 있습니다.
대소 문자를 혼합하여 처리해야하는 경우 (Red) 다음과 같이 할 수 있습니다.
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 ()); }
from https://stackoverflow.com/questions/17408083/converting-json-to-enum-type-with-requestbody by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Spring 데이터 REST : MongoDB 저장소에 대한 커스텀 질의 (0) | 2019.05.13 |
---|---|
[SPRING] Hibernate core 5.2.1 로의 마이그레이션 java.lang.NoSuchMethodError : org.hibernate.Session.getFlushMode () Lorg / hibernate / FlushMode; (0) | 2019.05.13 |
[SPRING] 런타임시 @Value로 주석 된 업데이트 필드 (0) | 2019.05.13 |
[SPRING] 서버 시작 및 완전히로드 된 모든 스프링 빈에 대한 리스너 (0) | 2019.05.13 |
[SPRING] JPA 대 플러시 대 커밋 (0) | 2019.05.13 |