사용의 구덩이 2 스프링 부팅 열거

열거의 방법에서 매개 변수를하고,이 솔루션은 컨버터가 장착되어 컨트롤러가 다음마다 코멘트 문제를 추가 바쁜하지 않을 경우,이 매개 변수의 앞에 메모를 추가 할 수 있습니다, 생각 구덩이에서 이전 말하기 파서는이 문제를 해결 할 수 있어야 추가합니다.

이제 두 번째 구덩이, 전제 조건을 열거하고 등에하기 :이 열거입니다 :

@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 ()); 
    } 
}

 

추천

출처www.cnblogs.com/hankuikui/p/11429996.html