当前位置: 首页 > 知识库问答 >
问题:

使用MOXy解组LocalDate/LocalDateTime

江文斌
2023-03-14
{
    "localDate": "2017-07-11",
    "localDateTime": "2017-07-11T10:11:10.817",
    "date": "2017-07-11T10:11:10.817+02:00"
}
{
    "date": "2017-07-11T10:11:10.817+02:00"
}

什么给了?MOXy似乎支持这些类型的序列化,但不支持反序列化?

import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Date;

@Path("/test/date")
public class DateTest {
    public static class Data {
        public LocalDate localDate;
        public LocalDateTime localDateTime;
        public Date date;
    }

    @GET
    @Path("roundtrip")
    public Response roundtrip() {
        Data sample = getSample();
        return roundtrip(sample);
    }

    @POST
    @Path("roundtrip")
    @Consumes(MediaType.APPLICATION_JSON)
    public Response roundtrip(Data t) {
        return Response.status(Response.Status.OK).entity(t).build();
    }

    protected Data getSample() {
        final Data data = new Data();
        data.localDate = LocalDate.now();
        data.localDateTime = LocalDateTime.now();
        data.date = new Date();
        return data;
    }
}

Moxy版本:jersey-media-moxy-2.25.1

共有1个答案

姜森
2023-03-14

根据Peeskillet的建议,我实现了以下适配器类:

public class LocalDateTimeAdapter extends XmlAdapter<String, LocalDateTime>{

  private static final DateTimeFormatter DTF = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");

  @Override
  public String marshal(LocalDateTime localDateTime) throws Exception {
    return localDateTime.format(DTF);
  }

  @Override
  public LocalDateTime unmarshal(String string) throws Exception {
    return LocalDateTime.parse(string, DTF);
  }

}

此外,我在我的MOXy类和适配器(在子包中)所在的同一个包中创建了package-info.java,内容如下:

@XmlJavaTypeAdapters({
  @XmlJavaTypeAdapter(type=LocalDateTime.class,
      value=LocalDateTimeAdapter.class)
})
package api;

import java.time.LocalDateTime;

import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapters;

import api.adapter.LocalDateTimeAdapter;

因此,编组和解组工作没有问题。使用dtf可以指定应用的格式。

 类似资料:
  • 现在,当我发送包含以下json数据的POST请求时: 它工作得很好,MOXY会自动将这个json映射到用户对象,很好 但我需要使用另一层嵌套来处理json,如下所示:

  • 在不使用getter和setter的情况下,JAXB可以正确地解组所提供的JSON。 null和“null”是完全不同的东西,但是我不想在POJO中包含这个字段,并且我必须忽略这些null值。 编辑

  • 问题内容: 我正在构建一系列链接的类,我希望它们的实例能够编组到XML,以便可以将它们保存到文件中并在以后再次读取。 目前,我正在使用以下代码作为测试用例: XML输出为: 元素为空是否有原因?我希望它包含日期(即)的字符串表示形式。为此,我是否需要编写自己的代码? 输出为: 问题答案: 您将必须创建一个这样的: 并使用 另请参阅是否要在程序包级别定义适配器。

  • 我在WebLogic12c(使用OpenJPA2.1.0)中运行web服务时遇到问题。web服务的响应是具有特定实体列表的DTO。执行服务后,无法生成其响应(没有任何错误或异常)。我认为在MOXy解组响应实体的操作过程中出现了一个问题(我在WebLogic11中没有遇到任何问题,因为它没有使用MOXy)。你对这个问题和解决方案有什么看法? 谢谢 列表的大小为3,但没有响应。

  • 我试图使用XPath将camunda:property元素解组到列表中,以跳过不必要的包装元素。不幸的是,我的财产列表总是空的。它位于Task类中。如有任何帮助,将不胜感激。 编辑#1:我遵循了以下链接,谁应该帮助我的问题,不幸的是,没有成功。http://blog.bdoughan.com/2011/05/specifying-eclipselink-moxy-as-your.html,这是官方

  • 我在我的Jersey(2.7)项目中使用Moxy,基本上只是为了在服务发出响应时将我的对象整理为JSON。它工作得很好,但现在我也在使用ContainerResponseFilter对发出的每个响应进行一些更改,我不确定如何将请求体的内容解组到一个对象中,这是我需要的。 但我不确定是否有可能将它自动转换为一个对象。我需要的信息比较简单,所以我想我可以用另一种方式解析JSON,但我很好奇。 我试过找