我创建了一个使用REST服务器进行CRUD操作的WebApp。我使用java Jersey和gradle。 当我执行POST操作时,我以JSON格式发送对象,如下所示:
ToDo t = new ToDo(...); // Object to be posted
Response response = client.target("http://localhost:8091/todos")
.request(MediaType.APPLICATION_JSON)
.post(Entity.entity(t, MediaType.APPLICATION_JSON));
但它引发了一个例外:
org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException: MessageBodyWriter not found for media type=application/json, type=class todos.ToDo, genericType=class todos.ToDo.
我的build.gradle:
buildscript {
repositories {
jcenter()
mavenCentral()
}
dependencies {
classpath (group: 'com.sahlbach.gradle', name: 'gradle-jetty-eclipse-plugin', version: '1.9.+')
}
}
apply plugin: 'java'
apply plugin: 'war'
apply plugin: 'jettyEclipse'
apply plugin: 'eclipse'
apply plugin: 'eclipse-wtp'
repositories {
mavenCentral()
}
dependencies {
providedCompile 'javax.servlet:javax.servlet-api:3.0.1'
compile 'org.glassfish.jersey.core:jersey-client:2.3.1'
}
答案 0 :(得分:2)
您将需要一个提供程序来处理JSON。 JAX-RS使用MessageBodyReader
和MessageBodWriter
来编组和解组不同的内容类型。开箱即用不支持JSON。我们需要添加一个具有所需提供程序的模块
我不熟悉Gradle和构建文件,以及如何添加依赖项,但是对于Maven,这是the Jersey User Guide中提到的依赖项,作为JSON绑定支持的首选依赖项
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-moxy</artifactId>
<version>#{jersey.version}</version>
</dependency>
请参阅Support for Common Media Type Representations(这是2.13的用户指南)
更新
所以看起来像Gradle你只需要添加这个依赖
compile: 'org.glassfish.jersey.media:jersey-media-moxy:2.13'
添加此选项后,应由Jersey客户端自动发现/配置提供程序