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.Date 및 java.util.Calendar 필드가 포함된 Java 오브젝트를 생성하고 이용하는 JAX-RS 자원 메소드의 예는 다음과 같습니다.
|
@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) { //... } } |
|
import java.util.Calendar; import java.util.Date; public class DataObject { public Date juDate; public Calendar juCalendar; } |
이 규칙은 DataObject 오브젝트의 java.util.Date 및 java.util.Calendar 필드에 플래그를 지정합니다. 소스 스캐너에서 이 규칙에 빠른 수정사항을 사용할 수 있습니다. 빠른 수정사항은
epoch 밀리초로 출력을 변환하는 필드에 @JsonbDateFormat(value = JsonbDateFormat.TIME_IN_MILLIS)를 추가합니다. 빠른 수정사항이 실행되고 나면 DataObject 클래스가 다음으로 변경됩니다.
|
import 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 바인딩 표준 필요? 문서를 참조하십시오.