相关疑难解决方法(0)

使用Jackson JSR310模块反序列化LocalDateTime

我正在使用描述Jackson数据类型JSR310页面的库,但我仍然难以让它工作.

我配置了以下bean:

@Bean
@Primary
public ObjectMapper objectMapper() {
    ObjectMapper mapper = new ObjectMapper();
    mapper.registerModule(new JSR310Module());
    return mapper;
}
Run Code Online (Sandbox Code Playgroud)

当我调用我的REST API时,日期格式输出是yyyy-MM-dd'T'HH:ss.SSSSSS,例如2015-04-11T00:10:38.905847.这可以通过我的AngularJS代码处理得很好.

当我想向REST API提交内容时,日期会发布为yyyy-MM-dd'T'HH:mm:ss.SSS'Z',例如2015-04-09T08:30:00.000Z

杰克逊最后一直在抱怨'Z'.如果我查看LocalDateTimeDeserializer它在文档中使用的DateTimeFormatter.ISO_LOCAL_DATE_TIMEboils ISO_LOCAL_DATE'T'ISO_LOCAL_TIME,它提到它没有覆盖区域.

所以我想我应该设置DateFormatObjectMapper我创建:

@Bean
@Primary
public ObjectMapper objectMapper() {
    ObjectMapper mapper = new ObjectMapper();
    mapper.registerModule(new JSR310Module());
    mapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"));
    return mapper;
}
Run Code Online (Sandbox Code Playgroud)

但这没有任何作用.我将其更改为简单的类似yyyy-MM-dd但序列化日期保留为以前的格式,反序列化也不受影响.

我在这做错了什么才能让它发挥作用?据我所知,我的JavaScript代码中的日期格式是ISO 8601格式...

java jackson jsr310 java-time

16
推荐指数
2
解决办法
3万
查看次数

(De)使用jackson xml序列化混合内容?

通过我所做的所有搜索,我理解使用混合内容的jackson序列化/反序列化xml是有问题的.有没有人知道使用Java处理以下xml的方法?

<xmlsample>
    <title>Yada yada yada <a href=\"component:tcm:757-228001\" id=\"Link_1492103133595\" title=\"yada\" name=\"Link_1492103133595\" xmlns=\"xhtml\">yada</a> yada</title>
    <link>test</link>
</xmlsample>
Run Code Online (Sandbox Code Playgroud)

我使用以下POJO:

@JacksonXmlRootElement(localName="xmlsample")
public class XmlSample{

    private String title;
    private String link;

    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    public String getLink() {
        return link;
    }
    public void setLink(String link) {
        this.link = link;
    }
}
Run Code Online (Sandbox Code Playgroud)

如果节点具有混合内容,如上例所示,我将收到以下错误:

java.io.IOException: Expected END_ELEMENT, got event of type 1
Run Code Online (Sandbox Code Playgroud)

如果节点具有纯文本,则反序列化有效.

我已经尝试使用JsonNode,TextNode,ObjectNode,Object而不是String作为数据类型.我尝试过自定义序列化程序和反序列化程序,但错误仍然存​​在.实际上,如果节点中有html,则处理不会到达自定义反序列化器.

这个xml来自第三方系统(SDL Tridion),我无法改变.

任何帮助将不胜感激!

编辑:我需要澄清该节点可能包含标记或可能包含纯文本,因此我不能创建一个代表标记的POJO,就像你在上面的xml中看到的那样.而且标记也可能比上面的例子复杂得多.这就是为什么我只是想把它强制成一个String.我不需要操作它,我只需要在POJO中保存它,这样它就可以不加改变地返回到数据库.

java xml jackson deserialization jackson-dataformat-xml

7
推荐指数
1
解决办法
806
查看次数

找不到工件 Jackson-modules-java8:jar

我使用open-jdk-10

mvn clean install
Run Code Online (Sandbox Code Playgroud)

在“中央”中找不到工件 com.fasterxml.jackson.module:jackson-modules-java8:jar:2.9.8

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>group</groupId>
    <artifactId>artifact</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>10</maven.compiler.source>
        <maven.compiler.target>10</maven.compiler.target>
        <jackson.version>2.9.8</jackson.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>${jackson.version}</version>
        </dependency>

        <dependency>
            <groupId>com.fasterxml.jackson.module</groupId>
            <artifactId>jackson-modules-java8</artifactId>
            <version>${jackson.version}</version>
        </dependency>
    </dependencies>

</project>
Run Code Online (Sandbox Code Playgroud)

没有jackson-modules-java8它成功构建。

<dependency>
    <groupId>com.fasterxml.jackson.module</groupId>
    <artifactId>jackson-modules-java8</artifactId>
    <version>${jackson.version}</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

有一个类似的问题,但它不能解决我的问题。我的 pom 文件中有 maven 依赖项。如果没有其他工作,手动下载东西是我要做的最后一件事。

jackson maven java-10

4
推荐指数
1
解决办法
2471
查看次数