JavaLocalDate(反)序列化可以在JAXRS服务器中工作,但不能在JAXRX客户端中工作
我有一个JAX-RS应用程序在WildFly上运行,并使用RestEasy和Jackson进行RESTAPI和JSON处理。我正在尝试将LocalDate序列化和反序列化为ISO格式的字符串。一种方法是使用注释定义序列化和反序列化方法,如下所示
public class MyClassWithLocalDate{
@JsonSerialize(using = LocalDateSerializer.class)
@JsonDeserialize(using = LocalDateDeserializer.class)
private LocalDate date;
private BigDecimal amount;
// constructor, getters and setters
}
我的LocalDateSerializer是由该书编写的,用于以ISO格式创建输出日期。这在已部署的应用程序中运行良好:
@GET
@Produces("application/json")
@Path("/localdate")
public Response getLocalDate() {
MyClassWithLocalDate result = new MyClassWithLocalDate();
result.setDate(LocalDate.now());
result.setAmount(BigDecimal.TEN);
return Response.ok().entity(result).build();
}
上面的代码使用类LocalDateSerializer来序列化LocalDate值,从而生成紧凑的JSON{"date":"2018-07-11", "amount":10}
。但是,我希望通过使用Arquillian创建一个部署,然后使用RestEasy client以以下方式访问API,从而为API创建一个测试:
@Test
@RunAsClient
public void testLocalDate() throws Exception {
Client client = ClientBuilder.newClient();
MyClassWithLocalDate myClass = new DistributionDate();
myClass.setDate(LocalDate.now());
myClass.setAmount(BigDecimal.ONE);
WebTarget targetCreate = client.target("http://localhost:8080/test/localdate"));
Response response = targetCreate.request().post(Entity.json(myClass));
此测试使用与部署的应用程序相同的代码库,尤其是相同的MyClassWithLocalDate。但是,当myClass在post(Entity.json(myClass))
中序列化时,它不使用LocalDateSerializer,而是使用默认的非常详细的LocalDate序列化程序,从而生成JSON{"date":{"year":2018, "month":"JULY", "dayOfMonth":11, "dayOfWeek":"WEDNESDAY", "era":"CE", "dayOfYear":192, "leapYear":false, "monthValue":7, "chronology":{"id":"ISO", "calendarType":"iso8601"}}, "amount":10}
。在发布文章时,如何使测试类使用LocalDateSerializer序列化LocalDate?注释显然是不够的
共 (0) 个答案