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

如何使用Jersey序列化为Json?(我正在使用Gradle)

严宏旷
2023-03-14

我试图让Jersey在我返回对象时序列化它们,就像这样:

@POST
@Path("/new")
@Consumes(MediaType.TEXT_PLAIN)
@Produces(MediaType.APPLICATION_JSON)
public User newUser(String username) {
    return new User(username);
}

当我用例如“john”对此执行POST请求时,它应该用User的json表示来响应。但是,它所做的只是给出错误状态500,服务器记录以下内容

全局阅读器拦截器:org.glassfish.jersey.server.internal。MappableExceptionWrapperInterceptor是全局编写器拦截器:org.glassfish.jersey.server.internal。MappableExceptionWrapperInterceptor org.glassfish.jersey.server.internal。JsonWithPaddingInterceptor名称:carl returning:cd.orbit.server.User@4c84f5102014年7月5日晚上10:17:49 org.glassfish.jersey.message.internal。WriterInterceptorExecutor$TerminalWriterInterceptor aroundWriteTo严重:找不到媒体类型=application/json,类型=class cd.orbit.server的MessageBodyWriter。对于用户,genericType=class cd.orbit.server.User。

这让我觉得,不知怎么的,没有找到将我的用户对象转换为Json的库/方法,但我有以下gradle构建文件(请注意jackson依赖关系):

buildscript {
repositories {
    mavenCentral()
}

dependencies {
    classpath 'com.google.appengine:gradle-appengine-plugin:1.9.6'
}
}

apply plugin: 'war'
apply plugin: 'appengine'

sourceCompatibility = 1.7
version = '1.0'

repositories {
mavenCentral()
}

dependencies {
providedCompile 'javax.servlet:servlet-api:2.5'
compile 'com.google.appengine:appengine-api-1.0-sdk:1.9.6'
testCompile group: 'junit', name: 'junit', version: '4.11'

compile 'org.glassfish.jersey.core:jersey-client:2.10.1'
compile 'org.glassfish.jersey.core:jersey-server:2.10.1'
compile 'org.glassfish.jersey.core:jersey-common:2.10.1'
compile 'org.glassfish.jersey.containers:jersey-container-servlet-core:2.10'

compile 'com.fasterxml.jackson.core:jackson-annotations:2.3.2'
compile 'com.fasterxml.jackson.jaxrs:jackson-jaxrs-base:2.3.2'
compile 'com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider:2.3.2'

compile 'com.badlogicgames.gdx:gdx:1.0.0'

}

appengine {
httpPort = 8085

appcfg {
    email = 'aaaaa'
    passIn = true

    app {
        id = 'aaaaa'
    }
}
}

task copyDeps(type: Copy) {
from configurations.runtime
into "${rootDir}/war/WEB-INF/lib"
}

顺便说一下,< code>User类使用所有正确的注释。

为什么我的服务器(谷歌应用引擎)运行泽西不返回JSON格式的项目?

共有1个答案

钱震博
2023-03-14

您需要将依赖项添加到Jersey的具体JSON提供程序中。要使用Jackson作为JSON提供程序,您需要添加jersey media JSON Jackson模块。

然后,您需要注册JacksonFeature,如下所示。

final Application application = new ResourceConfig()
    .packages("your.packages.to.scan")
    .register(JacksonFeature.class)
    // rest omitted

请检查您是否拥有jersey-media-jackson模块所需的所有其他依赖项。

最后,你可以在这里找到更多的细节。

 类似资料:
  • 问题内容: 我意识到这有点不稳定,但是我想使用Jersey客户端使用Java序列化作为“编组” 将Spring Integration发送到Jersey服务器。是否对此具有内置或贡献支持,还是我必须编写自己的MessageBodyReader / Writer?我试图在客户端请求的类型设置到两个“应用程序/ x-java的序列化对象”,并和它只是提供了常用的: 谷歌和泽西岛用户指南都对这一主题感到

  • 问题内容: 我有一个使用Jersey实现的JAX-RS REST服务。JAX-RS / Jersey的很酷的功能之一是,只需添加一些Java批注,就可以将POJO轻松转换为REST服务…包括使用JAXB批注将POJO转换为JSON的简单方法。 现在,我希望能够将这个酷炫的JSON修饰功能用于非REST用途-我很希望能够将其中一些对象序列化为JSON文本到磁盘。这是我要序列化的示例JAXB对象: J

  • 问题内容: 简而言之,这是我想在JAVA中解析的JSON对象的草图: 这些是我为解析而创建的 POJO (为简洁起见,我将省略这些语句): (1)完整的JSON对象的表示形式 (2)嵌套对象的表示: (3)项目的表示: 现在,创建一个Gson实例(用于导入), 每当我尝试访问可解析对象时(例如通过),都会收到一个。但是,Gson 确实 创建了我指定的类的对象,并且 不会 引发任何后续错误。 我知道

  • 问题内容: 我有此JSON,但无法弄清楚如何将其转换为C#中的对象列表。 这是JSON: 我尝试使用的代码: 无济于事。如何使用Newtonsoft的JSON库(Json.Net)将JSON反序列化为这些对象的列表? 问题答案: 您可以使用

  • 问题内容: 我正在尝试使Django函数进行JSON序列化并将其返回到对象中。 我正在这样使用它: 但是我得到这个错误: 有任何想法吗? 编辑:这是回溯: http://dpaste.com/38786/ 问题答案: 更新:Python现在拥有自己的json处理程序,只需使用即可代替。 Django序列化器模块旨在序列化Django ORM对象。如果要对常规Python字典进行编码,则应使用sim

  • 问题内容: 我是C ++的新手。使用序列化和反序列化类型数据的最简单方法是什么。我发现了一些使用示例,但它们对我来说是晦涩的。 问题答案: 请注意,将键解释为路径,例如,将对“ ab” =“ z”放置将创建{“ a”:{“ b”:“ z”}} JSON,而不是{“ ab”:“ z”} 。否则,使用是微不足道的。这是一个小例子。