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

如何让JAX-RS将Java8LocalDateTime属性作为JavaScript样式的日期字符串返回?

钱瑞
2023-03-14

我使用JAX-RS方法注释创建了一个RESTful web服务:

@GET
@Path("/test")
@Produces(MediaType.APPLICATION_JSON)
public MyThing test()
{
    MyThing myObject = new MyThing(LocalDateTime.now());
    return myObject;
}
{"myDateTimeProperty":{"hour":14,"minute":32,"second":39,"year":2014,"month":"NOVEMBER","dayOfMonth":6,"dayOfWeek":"THURSDAY","dayOfYear":310,"monthValue":11,"nano":0,"chronology":{"calendarType":"iso8601","id":"ISO"}},...}
{"myDateTimeProperty":"2014-11-07T15:06:36.545Z",...}

共有1个答案

陶胤
2023-03-14

我以前从未使用过localdatetime,所以我决定做一些测试。以下是我的发现:

>

  • Jersy 2.13和此提供程序(在没有额外配置的情况下完成该框)

    <dependency>
        <groupId>org.glassfish.jersey.media</groupId>
        <artifactId>jersey-media-moxy</artifactId>
        <version>${jersey.version}</version>
    </dependency>
    

    使用此提供程序的Jersey 2.13(支持JAXB Annotation-Dependency on jackson-module-jaxb-annotations),具有自定义适配器

    <dependency>
        <groupId>org.glassfish.jersey.media</groupId>
        <artifactId>jersey-media-json-jackson</artifactId>
        <version>${jersey.version}</version>
    </dependency>
    
    public class LocalDateTimeAdapter extends XmlAdapter<String, LocalDateTime> {
        @Override
        public LocalDateTime unmarshal(String s) throws Exception {
            return LocalDateTime.parse(s);
        }
        @Override
        public String marshal(LocalDateTime dateTime) throws Exception {
            return dateTime.toString();
        }   
    }
    
    // Getter for model class
    @XmlJavaTypeAdapter(LocalDateTimeAdapter.class)
    public LocalDateTime getDateTime() {
        return dateTime;
    }
    
    <dependency>
        <groupId>org.jboss.resteasy</groupId>
        <artifactId>resteasy-jackson2-provider</artifactId>
        <version>${resteasy.version}</version>
    </dependency>
    
    <dependency>
        <groupId>com.fasterxml.jackson.jaxrs</groupId>
        <artifactId>jackson-jaxrs-json-provider</artifactId>
        <version>2.4.0</version>
    </dependency>
    

    我们需要确保注册JacksonJaxBJSONProvider

    所以我想,任何使用Jackson的提供程序,如果没有一些自定义配置,不管是通过适配器(如上所示)还是其他一些自定义配置,都不会给出deisred结果。jersey-media-moxy提供程序不使用Jackson。

    以上信息大部分是不正确的。

    >

  • 默认情况下MOXY不工作。它通过简单地调用toString()来进行序列化,这可能是您想要的,也可能不是您想要的,并且在反序列化时它不会起作用。如果您正在使用MOXy,在它支持Java8之前,您将需要使用XMLAdapter

    Jackson您将需要配置它的Java8时间支持。泽西和雷斯特西都是如此。

  •  类似资料:
    • 问题内容: 我使用JAX-RS方法注释创建了RESTful Web服务: 这很好用,但是我想调整一件事:如果返回的Java对象包含新Java 8 LocalDateTime类型的属性,则将其表示为JSON对象: 我如何告诉JAX-RS返回JavaScript Date.toJSON()样式的字符串,例如 代替? 问题答案: 注意:请参见下面的更新 我以前从未使用过,所以我决定进行一些测试。这是我的

    • 我刚到爪哇。Postgres db包含日期的格式为。我需要转换为。 我已经试过了,但是显示的结果是错误的

    • 问题内容: 我陷入了一个问题,将不胜感激。我已经阅读了很多讨论,但它们似乎对我没有用。 如何将其转换为日期对象?我要这样做的原因是因为我想在google图表指令中使用它,其中列之一必须是日期。我不想将列类型设置为字符串: 例如: 问题答案: 这是我在控制器上所做的 我最终将日期格式化为所需的指令格式,如下所示。 这使我在图表的x轴上以dd / MM / yyyy(26/04/2002)的格式输入日

    • 问题内容: 我想要这种格式 问题答案: 您需要先 解析 日期字符串(使用方法),才能 使用与格式匹配的格式获取对象。 然后使用所需的格式来 格式化 Date对象(Use 方法)以获取字符串。 输出:- 第一种格式是RFC 822 TimeZone与您的日期字符串匹配。有关在日期格式中使用的其他各种选项,请参见。

    • 因此,我正在研究如何用javascript中的字符串进行日期比较,我发现大量堆栈溢出的帖子说你不能这样做。 参考: 如何在JavaScript中比较两个字符串日期? 用JavaScript比较两个日期 然而,下面的代码本与您所期望的完全一样,只使用字符串,当其中一个是YYYY-MM-DD而另一个是yyyy/mm/dd时,它甚至可以工作。有谁能解释一下为什么这样做,为什么stack overflow

    • 问题内容: 我想将“ 2014-07-15 06:55:14.198000 + 00:00”此字符串日期转换为Swift中的NSDate。 问题答案: 试试这个: 要进行进一步查询,请分别检查 Foundation 框架的Objective- C和Swift的NSDateFormatter和DateFormatter类。 __ Swift 3及更高版本(包括Swift 4)