如何使用自动发现在 Jersey 中启用自动 JSON 编组?
How do I enable automatic JSON marshalling in Jersey using autodiscovery?
我正在尝试创建一个生成 JSON 的非常简单的示例休息服务。我的理解是 Jersey 应该自动发现 Jackson 库(如果它们在 class 路径上)并且 JSON 编组应该自动发生。
调用GET报如下错误。我是否使用了适当的依赖项来使其工作,或者我是否遗漏了一些更基本的东西?
SEVERE: MessageBodyWriter not found for media type=application/json, type=class jsonex.Person, genericType=class jsonex.Person.
依赖关系
我正在使用 Gradle 并应用了 gretty 插件和这些依赖项:
dependencies {
compile group: 'javax.ws.rs', name: 'javax.ws.rs-api', version: '2+'
runtime group: 'org.glassfish.jersey.containers', name: 'jersey-container-servlet', version: '2.23'
runtime group: 'org.glassfish.jersey.media', name: 'jersey-media-json-jackson', version: '2.7'
}
申请class
package jsonex;
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;
import java.util.Collections;
import java.util.Set;
@ApplicationPath ("services")
public class PersonApp extends Application {
@Override
public Set<Object> getSingletons() {
return Collections.singleton(new PersonService());
}
}
服务class
package jsonex;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
@Path("people")
public class PersonService {
@GET
@Produces(MediaType.APPLICATION_JSON)
public Person getPerson() {
Person me = new Person();
me.setFirstName("Dave");
me.setLastName("R");
return me;
}
}
POJO
package jsonex;
public class Person {
String firstName, lastName;
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
}
谢谢!
为了 consume/produce JSON 在 Jersey with Jackson 中,您必须在您的应用程序中注册 Jackson 功能 (JacksonFeature
)。 它不像其他一些 Jersey 功能那样可以自动发现。
将 jersey-media-json-jackson
模块添加到依赖项后,在 Application
[=31 中注册 JacksonFeature
=] / ResourceConfig
子类:
@ApplicationPath("/api")
public class MyApplication extends Application {
@Override
public Set<Class<?>> getClasses() {
Set<Class<?>> classes = new HashSet<Class<?>>();
classes.add(JacksonFeature.class);
return classes;
}
}
@ApplicationPath("/api")
public class MyApplication extends ResourceConfig {
public MyApplication() {
register(JacksonFeature.class);
}
}
使用 Jackson 作为 Jersey 的 JSON 提供商的步骤在 . For more details, also check the Jersey documentation 中有完整描述。
我正在尝试创建一个生成 JSON 的非常简单的示例休息服务。我的理解是 Jersey 应该自动发现 Jackson 库(如果它们在 class 路径上)并且 JSON 编组应该自动发生。
调用GET报如下错误。我是否使用了适当的依赖项来使其工作,或者我是否遗漏了一些更基本的东西?
SEVERE: MessageBodyWriter not found for media type=application/json, type=class jsonex.Person, genericType=class jsonex.Person.
依赖关系
我正在使用 Gradle 并应用了 gretty 插件和这些依赖项:
dependencies {
compile group: 'javax.ws.rs', name: 'javax.ws.rs-api', version: '2+'
runtime group: 'org.glassfish.jersey.containers', name: 'jersey-container-servlet', version: '2.23'
runtime group: 'org.glassfish.jersey.media', name: 'jersey-media-json-jackson', version: '2.7'
}
申请class
package jsonex;
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;
import java.util.Collections;
import java.util.Set;
@ApplicationPath ("services")
public class PersonApp extends Application {
@Override
public Set<Object> getSingletons() {
return Collections.singleton(new PersonService());
}
}
服务class
package jsonex;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
@Path("people")
public class PersonService {
@GET
@Produces(MediaType.APPLICATION_JSON)
public Person getPerson() {
Person me = new Person();
me.setFirstName("Dave");
me.setLastName("R");
return me;
}
}
POJO
package jsonex;
public class Person {
String firstName, lastName;
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
}
谢谢!
为了 consume/produce JSON 在 Jersey with Jackson 中,您必须在您的应用程序中注册 Jackson 功能 (JacksonFeature
)。 它不像其他一些 Jersey 功能那样可以自动发现。
将 jersey-media-json-jackson
模块添加到依赖项后,在 Application
[=31 中注册 JacksonFeature
=] / ResourceConfig
子类:
@ApplicationPath("/api")
public class MyApplication extends Application {
@Override
public Set<Class<?>> getClasses() {
Set<Class<?>> classes = new HashSet<Class<?>>();
classes.add(JacksonFeature.class);
return classes;
}
}
@ApplicationPath("/api")
public class MyApplication extends ResourceConfig {
public MyApplication() {
register(JacksonFeature.class);
}
}
使用 Jackson 作为 Jersey 的 JSON 提供商的步骤在