栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

无法识别JSONObject作为POJO中的成员变量-Jersey

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

无法识别JSONObject作为POJO中的成员变量-Jersey

问题是杰克逊不知道如何创建

JSONObject
(至少在没有帮助的情况下)。Jackson主要处理基本类型和POJO。如果您希望能够处理
JSONObject
(假设这是来自的对象
org.json
),则可
jackson-datatype-json-org
以为Jackson支持添加。

下面是一个完整的测试。这是我用来测试的依赖项

<dependency>    <groupId>org.json</groupId>    <artifactId>json</artifactId>    <version>20141113</version></dependency><dependency>    <groupId>org.glassfish.jersey.media</groupId>    <artifactId>jersey-media-json-jackson</artifactId>    <version>2.16</version></dependency><dependency>  <groupId>com.fasterxml.jackson.datatype</groupId>  <artifactId>jackson-datatype-json-org</artifactId>  <version>2.3.2</version></dependency><dependency>    <groupId>org.glassfish.jersey.test-framework.providers</groupId>    <artifactId>jersey-test-framework-provider-grizzly2</artifactId>    <version>2.16</version>    <scope>test</scope></dependency>

注意: 我使用

jackson-datatype-json-org
的Jackson版本与
jersey-media-json-jackson
2.16 使用的Jackson版本相同。如果您使用的球衣杰克逊版本不同,则需要确保引入的杰克逊版本与
jackson-datatype-json-org
您使用的版本相同。这样,我们就不会混合Jackson版本。

这是使用Jersey测试框架的测试

import com.fasterxml.jackson.databind.ObjectMapper;import com.fasterxml.jackson.datatype.jsonorg.JsonOrgModule;import javax.ws.rs.Consumes;import javax.ws.rs.POST;import javax.ws.rs.Path;import javax.ws.rs.Produces;import javax.ws.rs.ext.Provider;import javax.ws.rs.ext.ContextResolver;import javax.ws.rs.client.Entity;import javax.ws.rs.core.MediaType;import javax.ws.rs.core.Response;import org.glassfish.jersey.client.ClientConfig;import org.glassfish.jersey.jackson.JacksonFeature;import org.glassfish.jersey.server.ResourceConfig;import org.glassfish.jersey.test.JerseyTest;import org.json.JSONObject;import org.junit.Test;import static junit.framework.Assert.*;public class JsonOrgTest extends JerseyTest {    public static class Model {        public String firstName;        public String lastName;        public JSonObject other;        // should br private with correct getters and setters    }    @Path("model")    public static class ModelResource {        @POST        @Consumes(MediaType.APPLICATION_JSON)        @Produces(MediaType.APPLICATION_JSON)        public Response post(Model model) { return Response.ok(model).build();        }    }    @Provider    public static class ObjectMapperProvider implements ContextResolver<ObjectMapper> {        private final ObjectMapper mapper;        public ObjectMapperProvider() { mapper = new ObjectMapper(); mapper.registerModule(new JsonOrgModule());        }        @Override        public ObjectMapper getContext(Class<?> type) { return mapper;        }    }    @Override    public ResourceConfig configure() {        return new ResourceConfig(ModelResource.class)     .register(ObjectMapperProvider.class)     .register(JacksonFeature.class);    }    @Override    public void configureClient(ClientConfig config) {        config.register(JacksonFeature.class);        config.register(ObjectMapperProvider.class);    }    @Test    public void should_return_org_json_data() {        final String json      = "{n"     + "  "firstName": "pee",n"     + "  "lastName": "skillet",n"     + "  "other": {n"     + "    "age": 100,n"     + "    "birthday": "yesterday"n"     + "  }n"     + "}";        Response response = target("model").request().post(Entity.json(json));        if (response.getStatus() != 200) { System.out.println(response.getStatus() + ": " + response.readEntity(String.class)); fail("should return data and 200");        } else { Model model = response.readEntity(Model.class); JSonObject other = model.other; System.out.println(other.toString()); assertEquals("pee", model.firstName); assertEquals("skillet", model.lastName); assertEquals(100, other.getInt("age")); assertEquals("yesterday", other.getString("birthday"));        }    }}

您还应该做的是摆脱上面评论中的 所有 Jackson依赖项。您只需要一个依赖项即可支持Jackson JSON。

<dependency>    <groupId>org.glassfish.jersey.media</groupId>    <artifactId>jersey-media-json-jackson</artifactId>    <version>2.16</version></dependency>

还要注意

ObjectMapperProvider
测试中的。您将需要此注册
JsonOrgModule
ObjectMapper
为了让杰克逊能够处理
JSONObject
。这个很重要。如果您没有
ContextResolver
,则上面的示例将失败。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/406898.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号