홈>
주석을 달 때 항상 주어진 속성을 토큰 화하기 위해 사용자 정의 주석을 만들려고하므로 다음 구조를 갖습니다.
@JsonComponent
public class TokenSerializer {
@JsonSerialize(using = IdToTokenSerializer.class) // This does not work
@JsonDeserialize(using = TokenToIdDeserializer.class) // This does not work
@Retention(RetentionPolicy.RUNTIME)
public static @interface TokenizedId {
Class<?> value();
}
public static class IdToTokenSerializer extends JsonSerializer<Long> implements ContextualSerializer {
...
}
public static class TokenToIdDeserializer extends JsonDeserializer<Long> implements ContextualDeserializer {
...
}
}
왜 그런 식으로 사용하나요?
@TokenizedId
조건을 직렬화 기/디시리얼라이저에서 고려하여 수행 할 클래스를 제공합니다. 이 값은
ContextualDeserializer
를 사용하여 구성됩니다.
@TokenizedId
에서 클래스를 가져옵니다.
.
문제는 다음과 같이 주석을 달면 직렬 변환기와 직렬 변환기가 작동하지 않는다는 것입니다.
@TokenizedId(MyClass.class)
private Long id;
그러나 그들은 이렇게 사용할 때 작동합니다 (
@JsonSerialize
제거)
그리고
@JsonDeserialize
@TokenizedId
에서
) :
@JsonSerialize(using = IdToTokenSerializer.class)
@JsonDeserialize(using = TokenToIdDeserializer.class)
@TokenizedId(MyClass.class)
private Long id;
개인적으로 나는이 접근법을 좋아하지 않았다. 왜냐하면 개발자는 ID를 토큰 화 할 때 항상이 세 가지 주석을 사용해야한다는 것을 기억해야하며 또한
@TokenizedId
를 원합니다.
항상 이러한 시리얼 라이저와 관련이 있습니다.
다른 주석에 주석을 달 때 시리얼 라이저/디시리얼라이저를 작동시키는 방법이 있습니까?
- 답변 # 1
관련 질문
- java : 스프링 부트에서 JMSContext 클래스를 찾을 수 없음
- java : 422 Unprocessable Entity에서 사용자 정의 응답 JSON 가져오기
- Spring Boot에서 txt java StringIndexOutOfBound 파일 읽기 오류
- java : kubernetes의 마운트된 볼륨에서 구성 데이터를 스프링 부트 애플리케이션으로 로드할 수 없음
- MongoDB/Java Spring Boot에서 월별 카운트 얻기
- java : @Service의 메소드에서 예외를 던지지 않음
- java : 동일한 Namespace 및 localPart를 사용하여 두 끝점을 정의할 때 Spring WS 오류
- Java: 재귀 메서드 호출 및 루프에서 나가기
- java : 최대 절전 모드의 Longvarchar
- java : Rest 서비스에서 데이터를 가져와 파일에 저장하는 방법은 무엇입니까?
Jackson 라이브러리에서 힌트를 찾은 후 주석이 원하는 방식으로 작동하도록 만들 수있었습니다. 주석 :
내 주석에 이것을 포함하면 문제가 해결되었습니다.
@JacksonAnnotationsInside @JsonSerialize(using = IdToTokenSerializer.class) @JsonDeserialize(using = TokenToIdDeserializer.class) @Retention(RetentionPolicy.RUNTIME) public static @interface TokenizedId { Class<?> value(); }