有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案