【发布时间】:2016-11-11 23:30:25
【问题描述】:
我在 Eclipse 4.6.1 中使用 RESTEasy 3.1.0.CR3 和 Tomcat 8.5.6,以及 JSBoss resteasy-jackson2-provider。我有一个简单的 JavaBean FooBar,它返回一个字符串“ID”和一个 java.nio.file.Path“路径”。
Jackson 使序列化为 JSON 变得容易。在我的 JAX-RS 资源中,我只需指定 @Produces("application/json; charset=UTF-8")。但是杰克逊没有使用Path.toString()。相反,它似乎在使用Path.toURI().toString() 或其他东西:
{
"id": "foo",
"path": "file:///C:/Users/jdoe/bar"
}
为什么!??更重要的是,我怎样才能让杰克逊简单地使用Path 的toString() 版本?
这是我的项目依赖树:
+- com.google.code.findbugs:jsr305:jar:3.0.1:provided
+- com.google.guava:guava:jar:20.0:compile
+- javax.ws.rs:javax.ws.rs-api:jar:2.0.1:provided
+- org.jboss.resteasy:resteasy-jaxrs:jar:3.1.0.CR3:compile
| +- org.jboss.spec.javax.ws.rs:jboss-jaxrs-api_2.0_spec:jar:1.0.1.Beta1:compile
| +- org.jboss.resteasy:resteasy-jaxrs-services:jar:3.1.0.CR3:compile
| +- org.jboss.spec.javax.annotation:jboss-annotations-api_1.2_spec:jar:1.0.0.Final:compile
| +- javax.activation:activation:jar:1.1.1:compile
| +- org.apache.httpcomponents:httpclient:jar:4.5.2:compile
| | +- org.apache.httpcomponents:httpcore:jar:4.4.4:compile
| | +- commons-logging:commons-logging:jar:1.2:compile
| | \- commons-codec:commons-codec:jar:1.9:compile
| +- commons-io:commons-io:jar:2.5:compile
| +- net.jcip:jcip-annotations:jar:1.0:compile
| \- org.jboss.logging:jboss-logging:jar:3.3.0.Final:compile
+- org.jboss.resteasy:resteasy-servlet-initializer:jar:3.1.0.CR3:compile
+- org.jboss.resteasy:resteasy-jackson2-provider:jar:3.1.0.CR3:compile
| +- com.fasterxml.jackson.core:jackson-core:jar:2.8.3:compile
| +- com.fasterxml.jackson.core:jackson-databind:jar:2.8.3:compile
| +- com.fasterxml.jackson.core:jackson-annotations:jar:2.8.3:compile
| \- com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider:jar:2.8.3:compile
| +- com.fasterxml.jackson.jaxrs:jackson-jaxrs-base:jar:2.8.3:compile
| \- com.fasterxml.jackson.module:jackson-module-jaxb-annotations:jar:2.8.3:compile
+- junit:junit:jar:4.12:test
| \- org.hamcrest:hamcrest-core:jar:1.3:test
\- org.hamcrest:hamcrest-library:jar:1.3:test
请注意,我不可以向我的 FooBar 类添加注释,这是一个不应与 RESTful API 序列化细节耦合的域模型类。
我想要一种简单的方法来挂钩到 RESTEasy 中的 Jackson2 并修改 Path 属性值的序列化,而无需修改我的类或为我的类编写自定义序列化程序。
【问题讨论】:
-
你能分享 Jackson 版本吗,因为至少 2.7.0 使用 ToStringSerializer 来序列化 Path。
-
嗯,但是你能提供你的项目解决的jackson-core版本吗
-
我为你添加了完整的依赖树。
-
您在此版本中使用的是 2.8.3,他们已添加 NioPathSerializer 并调用 path.toUri().toString()。尝试将jackson的版本降级到2.7.X
标签: json serialization jackson resteasy