相关疑难解决方法(0)

自定义ObjectMapper与Jersey 2.2和Jackson 2.1

我正在与Grizzly,Jersey和Jackson一起使用REST应用程序,因为Jersey忽略了我的自定义ObjectMapper.

POM依赖:

<dependencies>
    <dependency>
        <groupId>org.glassfish.jersey.containers</groupId>
        <artifactId>jersey-container-grizzly2-servlet</artifactId>
        <version>2.2</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.jaxrs</groupId>
        <artifactId>jackson-jaxrs-json-provider</artifactId>
        <version>2.1.4</version>
    </dependency>
</dependencies>
Run Code Online (Sandbox Code Playgroud)

结果版本是:Grizzly 2.3.3,Jackson 2.1.4和Jersey 2.2.

主类(我希望明确注册Jersey组件):

public class Main {
    public static void main(String[] args) {
        try {
            ResourceConfig rc = new ResourceConfig();
            rc.register(ExampleResource.class);
            rc.register(ObjectMapperResolver.class);

            HttpHandler handler = ContainerFactory.createContainer(
                    GrizzlyHttpContainer.class, rc);

            URI uri = new URI("http://0.0.0.0:8080/");

            HttpServer server = GrizzlyHttpServerFactory.createHttpServer(uri);

            ServerConfiguration config = server.getServerConfiguration();
            config.addHttpHandler(handler, "/");

            server.start();
            System.in.read();

        } catch (ProcessingException | URISyntaxException | IOException e) {
            throw new Error("Unable to create HTTP server.", e);
        }
    } …
Run Code Online (Sandbox Code Playgroud)

java jax-rs jersey jackson jersey-2.0

46
推荐指数
6
解决办法
7万
查看次数

使用Jackson ObjectMapper和Jersey

我正在使用Jersey 2.4创建一个简单的REST接口来提供JSON对象.我的问题是我正在尝试使用fastxml Jackson注释来控制输出,这对我不起作用.我已将注释放入我的bean类中,但它们被忽略了.

当我显式创建一个ObjectMapper并使用它来对Java bean进行字符串化时,我得到了我想要的输出,它尊重了Jackson注释.但是,我更希望我不必执行此步骤,以便我的资源类可以简单地返回bean,并且Jersey框架负责对其进行字符串化.

我试图使用Custom ObjectMapper与Jersey 2.2和Jackson 2.1的答案解决这个问题,但是,这似乎对我没有用.我看到ContextResolver已创建,但从未调用过.

我也花了很多时间试图解决这个看似简单的问题.我已将其删除为一个非常简单的测试用例,如下所示.我很感激任何帮助解决这个问题.

资源Java类:

@Path("resource")
public class MainResource {

    public static class Foobar {
        @JsonIgnore
        private String foo = "foo";
        private String baa = "baa";
        private Map<String, List<? extends Number>> map = new HashMap<>();

        public Foobar() {
            map.put("even", Arrays.asList(new Integer[] { 2, 4, 6, 8, 10 }));
            map.put("odd", Arrays.asList(new Integer[] { 1, 3, 5, 7, 9 }));
            map.put("float", Arrays.asList(new Float[] { 1.1F, 2.2F, 3.3F }));
        }

        public String getFoo() {
            return …
Run Code Online (Sandbox Code Playgroud)

java rest spring json jersey-2.0

14
推荐指数
4
解决办法
4万
查看次数

RestEasyClientBuild注册ResteasyJackson2Provider - 关于重复的WARN

我使用org.jboss.resteasy.client.jaxrs.ResteasyClientBuilder以下面的方式构建REST客户端:

ResteasyClient client = (new ResteasyClientBuilder())
    .maxPooledPerRoute(5)
    .connectionPoolSize(10)
    .socketTimeout(10L, TimeUnit.SECONDS)
    .register(jacksonProvider)
    .register(new RestClientLogger())
    .register(new RestClientMDCFilter())
    .build();
Run Code Online (Sandbox Code Playgroud)

jacksonProvider那里注册的是一个ResteasyJackson2Provider jacksonProvider = new ResteasyJackson2Provider();带有ObjectMapper对反序列化很重要的自定义.到目前为止,问题是,我在JBoss中得到以下警告:

10:31:38,414 WARN  [org.jboss.resteasy.resteasy_jaxrs.i18n] (default-threads - 1) RESTEASY002155: Provider class org.jboss.resteasy.plugins.providers.jackson.ResteasyJackson2Provider is already registered.  2nd registration is being ignored.
Run Code Online (Sandbox Code Playgroud)

如果在已经存在之前已注册的同一类的实例的情况下检查文档,这是有意义的.我使用反编译器来检查ResteasyClientBuilder正在做什么并且能够看到,它扫描类路径以查找包含描述应该注册"内置"提供程序的资源的jar.

其中一个jboss提供的实现现在显然已经定义了一个ResteasyJackson2Provider在那里注册的实现,这使我以后无法注册我自己的实例.

我有什么选择?我需要得到我的版本ResteasyJackson2Provider- 或者至少是我的版本ObjectMapper.我可以以某种方式取代现有的吗?

java jboss jax-rs resteasy

5
推荐指数
1
解决办法
2335
查看次数

标签 统计

java ×3

jax-rs ×2

jersey-2.0 ×2

jackson ×1

jboss ×1

jersey ×1

json ×1

rest ×1

resteasy ×1

spring ×1