Jackson을 사용하여 Java 클래스의 직렬화를 사용자 정의하려면 JsonSerializer를 확장하는 사용자 정의 직렬 변환기 class.
1. 항목에 대한 사용자 정의 직렬 변환기 만들기:
public class ItemSerializer extends JsonSerializer<Item> { @Override public void serialize(Item value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException { jgen.writeStartObject(); jgen.writeNumberField("id", value.id); jgen.writeNumberField("itemNr", value.itemNr); jgen.writeNumberField("createdBy", value.createdBy.id); jgen.writeEndObject(); } }
2. 사용자 정의 직렬화 모듈 생성 및 직렬 변환기 등록:
ObjectMapper mapper = new ObjectMapper(); SimpleModule simpleModule = new SimpleModule("SimpleModule", new Version(1,0,0,null)); simpleModule.addSerializer(new ItemSerializer()); mapper.registerModule(simpleModule);
3. 항목 객체 직렬화:
StringWriter writer = new StringWriter(); mapper.writeValue(writer, myItem);
사용자 정의 직렬 변환기를 등록할 때 발생한 오류(java.lang.IllegalArgumentException: ... 유형의 JsonSerializer가 유효한 정의를 정의하지 않음) handlerType())은 직렬 변환기가 처리하는 유형을 지정하지 않음을 나타냅니다.
이 문제를 해결하려면 JsonSerializer 구현이 handlerType() 메서드를 올바르게 정의하는지 확인하세요.
대체 접근 방식은 필드에 @를 주석으로 추가하는 것입니다. JsonSerialize(= CustomSerializer.class 사용)를 사용하여 특정 serializer.
날짜 직렬화를 사용자 정의하려면 SerializerBase:
public class CustomDateSerializer extends SerializerBase<Date> { public CustomDateSerializer() { super(Date.class, true); } @Override public void serialize(Date value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException { SimpleDateFormat formatter = new SimpleDateFormat("EEE MMM dd yyyy HH:mm:ss 'GMT'ZZZ (z)"); String format = formatter.format(value); jgen.writeString(format); } }
를 확장하는 사용자 정의 직렬 변환기를 생성한 다음 필드에 주석을 추가합니다.
@JsonSerialize(using = CustomDateSerializer.class) private Date createdAt;
이를 통해 직렬화 및 역직렬화를 세부적으로 제어할 수 있습니다. 프로세스입니다.
위 내용은 Jackson과 함께 사용자 정의 직렬 변환기를 어떻게 사용합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!