열거의 방법에서 매개 변수를하고,이 솔루션은 컨버터가 장착되어 컨트롤러가 다음마다 코멘트 문제를 추가 바쁜하지 않을 경우,이 매개 변수의 앞에 메모를 추가 할 수 있습니다, 생각 구덩이에서 이전 말하기 파서는이 문제를 해결 할 수 있어야 추가합니다.
이제 두 번째 구덩이, 전제 조건을 열거하고 등에하기 :이 열거입니다 :
@Getter @AllArgsConstructor 공공 열거 EnumExpenseType 구현 BaseEnum { (작은 기쁨 1 ), 큰 기쁨 ( 2 ) 개인 최종 INT의 값; }
그것을 전달하는 복잡한 객체 속성이기 때문에 그것은 지금이 아니면 할 때 매개 변수, 복잡한 객체는 jackjson GET 직렬화 복원됩니다.
프런트 엔드는 JSON 문자열을 건너, 우리는 안티 - 시퀀스 객체의 컨트롤러에 넣어.
직접 말의 결론을 보여주지, 잭슨의 기본은, 그들은 여전히 우리의 요구를 충족 할 수없는 값이지도를 할 서수 인덱스를 사용하는 것입니다.
그래서 잭슨은 각 열거의 구성을 수정하거나 변경하는 추가하지 @JsonCreator을, 나는 아직도, 통합 구성을 선호
직접 코드에 :
/ ** * 수신 용액 BaseEnum 원위 JSON는 인덱스 값에 따른 값의 값이 실제의 처리에 따라 처리되는 경우 * / @JsonComponent 공용 클래스 BaseEnumDeserializer 연장 JsonDeserializer는 <BaseEnum> { @Override가 공개 BaseEnum 직렬화 (JP JsonParser, DeserializationContext의 ctxt)는 슬로우 IOException이, JsonProcessingException { JsonNode 노드 = jp.getCodec () readTree (JP); 문자열 currentName = jp.currentName () 객체 CurrentValue에 = jp.getCurrentValue () 클래스 findPropertyType =BeanUtils.findPropertyType (currentName, currentValue.getClass ()); BaseEnum의 B = EnumUtil.getEnumByValue (findPropertyType, node.intValue ()); 반환 B 단계; } }
/ ** * @author : HKK * / 공용 클래스 AuditHttpMessageConverter는 확장 MappingJackson2HttpMessageConverter { 공공 AuditHttpMessageConverter (ObjectMapper objectMapper) { SimpleModule simpleModule1 = 새로운 SimpleModule을 (); (. BaseEnum simpleModule1.addDeserializer 클래스 , 새로운 BaseEnumDeserializer ()); objectMapper.registerModule (simpleModule1); 슈퍼 .setObjectMapper (objectMapper); } }
그런 다음 webmvcconfig를 구성 :
@Override 공공 무효 extendMessageConverters (목록 <HttpMessageConverter <>>? 컨버터) { // 替换自带JSON序列化器 MappingJackson2HttpMessageConverter 변환; 반복자 <? HttpMessageConverter <>>는 그것이 = converters.iterator을 (); 반면 (it.hasNext ()) { 경우 (ClassUtils.isAssignable (it.next () getClass () MappingJackson2HttpMessageConverter.. 등급 )) { it.remove (); } } converters.add ( 새로운 MappingJackson2HttpMessageConverter (objectMapper)); // BaseEnum反序列化支持 converters.add ( 새 AuditHttpMessageConverter (builder.build ())); }
구성이 완료됩니다.
이 직렬화되고, 그 직렬화는 여전히 문제는, 당신은 가치에 대한 코멘트 @jsonValue을 할 수 있지만 문제가없는 경우, 당신은 코드에 직접 통합 된 구성을 수행 할 수 있습니다
/ ** 직렬화 JSON는 지정된 순서 getValue 때 * BaseEnum 서브 클래스와, * / @JsonComponent 공용 클래스 BaseEnumSerializer이 (가) 확장 JsonSerializer는 <BaseEnum> { @Override 공개 공극은 직렬화 (BaseEnum 값 JsonGenerator 겐, SerializerProvider 시리얼 라이저)를 발생 IOException가 { gen.writeNumber (value.getValue ()); } }