gpt4 book ai didi

java - 如何使用自动发现在 Jersey 中启用自动 JSON 编码?

转载 作者:行者123 更新时间:2023-12-02 02:56:22 26 4
gpt4 key购买 nike

我正在尝试创建一个非常简单的示例休息服务来生成 JSON。我的理解是 Jersey 应该自动发现 Jackson 库(如果它们位于类路径上)并且 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'
}

应用程序类

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());
}
}

服务等级

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;
}
}

谢谢!

最佳答案

为了使用 Jackson 在 Jersey 中使用/生成 JSON,您必须在应用程序中注册 Jackson 功能 ( JacksonFeature )。 它不像 Jersey 的其他一些功能那样可自动发现。

添加jersey-media-json-jackson后模块到您的依赖项,注册 JacksonFeature在你的Application/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);
}
}

answer 中完整描述了使用 Jackson 作为 Jersey 的 JSON 提供程序的步骤。 。欲了解更多详情,另请查看 Jersey documentation .

关于java - 如何使用自动发现在 Jersey 中启用自动 JSON 编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43026240/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com