날짜 및 달력 유형의 JSON 바인딩을 변환해야 함

JAX-RS 2.1에서는 JSON 오브젝트와 Java 오브젝트 간 직렬화 및 직렬화 해제에 사용되는 내부 라이브러리가 Jackson에서 Yasson으로 변경되었습니다. Yasson은 JSON-B의 참조 구현입니다. Jackson과 Yasson은 서로 다른 방식으로 시간 관련 오브젝트를 직렬화합니다. 예를 들어, 다음과 같습니다.

Jackson Yasson
java.util.Date 726213720000 1993-02-05T06:02:00Z[UTC]
java.util.Calendar 726213720000 1993-02-05T00:00:00-06:00[America/Chicago]

JSON 유형 데이터를 생성하거나 이용하는 JAX-RS 자원 메소드가 영향을 받을 수 있습니다. 이 규칙은 JAX-RS 자원 메소드에서 생성하거나 이용하는 오브젝트에 포함된 java.util.Date 또는 java.util.Calendar 필드에 플래그를 지정합니다.

java.util.Datejava.util.Calendar 필드가 포함된 Java 오브젝트를 생성하고 이용하는 JAX-RS 자원 메소드의 예는 다음과 같습니다.

< 보안 범위 class = "코드"> @Path("/ ")
@ApplicationScoped
public class MyService {

@GET
@Path("/get")
@Produces(MediaType.APPLICATION_JSON)
public DataObject getData() {
//...
}

@GET
@Path("/set")
@Consumes(MediaType.APPLICATION_JSON)
public void setData(DataObject data) {
//...
}
}
< 보안 범위 class = "코드"> < span class= "JavaKeyword"> 가져오기 < /span> java.util.Calendar;
import java.util.Date;

public class DataObject {
public Date juDate;
public Calendar juCalendar;
}

이 규칙은 java.util.Datejava.util.Calendar 필드에 플래그를 지정합니다 DataObject 객체에 플래그를 지정합니다. 이 규칙의 경우 이 필드에 @JsonbDateFormat(value = JsonbDateFormat.TIME_IN_MILLIS ) 어노테이션을 추가하는 자동 수정이 제공됩니다 를 이 필드에 추가하여 출력을 epoch milliseconds.After 로 변환하는 자동화된 수정이 적용되면 DataObject 클래스 는 다음과 같이 업데이트됩니다:

< 보안 범위 class = "코드"> < span class= "JavaKeyword"> 가져오기 < /span> java.util.Calendar;
import java.util.Date;
import javax.json.bind.annotation.JsonbDateFormat;

public class DataObject {
@JsonbDateFormat(value = JsonbDateFormat.TIME_IN_MILLIS)
public Date juDate;
@JsonbDateFormat(value = JsonbDateFormat.TIME_IN_MILLIS)
public Calendar juCalendar;
}

참고: 액세스하려면 @javax.json.bind.annotation.JsonbDateFormat 어노테이션에 액세스하려면 자동화된 수정에 의해 추가되며, 자동화된 수정은 jsonb 기능을 Liberty server.xml 구성 파일에 추가합니다. 예를 들어, jaxrs-2.1 기능을 사용하는 경우 jsonb-1.0 기능을 추가하십시오.

Jackson과 Yasson 사이의 동작 차이점에 대한 자세한 정보는 Jackson과 JSON-B 동작을 비교하는 JSON 바인딩 표준 필요? 문서를 참조하십시오.