Powiązanie JSON dla typów daty i kalendarza musi zostać przekształcone

W usługach JAX-RS 2.1 wewnętrzna biblioteka używana do przekształcania do i z postaci szeregowej między obiektami JSON i Java została zmieniona z Jackson na Yasson. Yasson jest implementacją odwołania JSON-B. Biblioteki Jackson i Yasson przekształcą obiekty związane z czasem na różne sposoby, na przykład:

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

Może dotyczyć dowolnych metod zasobów JAX-RS, które generują i pobierają dane typu JSON. Ta reguła oznacza flagą wszystkie pola java.util.Date lub java.util.Calendar zawarte w obiekcie generowanym lub pobieranym przez metodę zasobu JAX-RS.

Poniżej znajduje się przykład metod zasobów JAX-RS, które generują i pobierają obiekt Java zawierający pole java.util.Date i java.util.Calendar:

< span class="Kod"> @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) {
//...
}
}
< span class="Kod"> < span class= "JavaKeyword"> zaimportuj < /span> java.util.Calendar;
import java.util.Date;

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

Ta reguła oznacza java.util.Date i java.util.Calendar w polu DataObject obiektu. W przypadku tej reguły zapewniona zostanie automatyczna poprawka w celu dodania adnotacji @JsonbDateFormat(value = JsonbDateFormat.TIME_IN_MILLIS ) do tych pól, aby przekonwertować dane wyjściowe na epokę milliseconds.After automatyczna poprawka zostanie zastosowana, klasa DataObject zostanie zaktualizowana w następujący sposób:

< span class="Kod"> < span class= "JavaKeyword"> zaimportuj < /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;
}

Uwaga: Aby uzyskać dostęp do @javax.json.bind.annotation.JsonbDateFormat zostanie dodana przez automatyczną poprawkę, automatyczna poprawka doda funkcję jsonb do pliku konfiguracyjnego Liberty server.xml pliku konfiguracyjnego. Należy na przykład dodać składnik jsonb-1.0 w przypadku korzystania ze składnika jaxrs-2.1.

Aby uzyskać więcej szczegółów na temat różnic w zachowaniu między specyfikacjami Jackson a Yasson, należy zapoznać się z informacjami na stronie Czy już czas na standard powiązań JSON? Artykuł porównujący zachowanie Jackson i JSON-B.