将javax.ws.rs实体序列化为json

将javax.ws.rs实体序列化为json,java,json,jersey,jax-rs,jersey-2.0,Java,Json,Jersey,Jax Rs,Jersey 2.0,我想通过org.glassfish.jersey实现将序列化为Json Map<String, String> entity = Maps.newHashMap(); entity.put("foo", "bar"); Response response = Response.status(Response.Status.OK) .entity(entity) .type

我想通过
org.glassfish.jersey
实现将序列化为Json

Map<String, String> entity = Maps.newHashMap();
entity.put("foo", "bar");

Response response = Response.status(Response.Status.OK)
                            .entity(entity)
                            .type(MediaType.APPLICATION_JSON).build();

System.out.println(response.getEntity());
Map entity=Maps.newHashMap();
实体认沽期权(“foo”、“bar”);
Response=Response.status(Response.status.OK)
.实体(实体)
.type(MediaType.APPLICATION_JSON).build();
System.out.println(response.getEntity());

此映射序列化为非标准
{foo:“bar”}
。我想在单元测试中测试这种行为。

您不能这样测试。你在这里干什么

Response response = Response.status(Response.Status.OK)
                            .entity(entity)
                            .type(MediaType.APPLICATION_JSON).build();
正在建立一个出站响应。在JAX-RS框架中,在发送响应后,例如

@GET
@Produced(MediaType.APPLICATION_JSON)
public Response getResponse() {
    ...
    return Response.status(Response.Status.OK)
                    .entity(entity)
                    .type(MediaType.APPLICATION_JSON).build();
}
它仍然需要通过一个函数来实现JSON的序列化

  • 阅读更多关于
也就是说,泽西岛有一个,我们可以用来测试我们的资源方法。你可以找到所有官方的例子

样本(稍作改动):

这些是所需的最小Maven依赖项

<dependencies>
    <dependency>
        <groupId>org.glassfish.jersey.test-framework</groupId>
        <artifactId>jersey-test-framework-core</artifactId>
        <version>2.13</version>
    </dependency>
    <dependency>
        <groupId>org.glassfish.jersey.test-framework.providers</groupId>
        <artifactId>jersey-test-framework-provider-grizzly2</artifactId>
        <version>2.13</version>
    </dependency>
    <dependency>
        <groupId>org.glassfish.jersey.media</groupId>
        <artifactId>jersey-media-json-jackson</artifactId>
        <version>2.13</version>
    </dependency>
</dependencies>

org.glassfish.jersey.test-framework
jersey测试框架核心
2.13
org.glassfish.jersey.test-framework.providers
jersey-test-framework-provider-grizzly2
2.13
org.glassfish.jersey.media
泽西媒体公司
2.13
测试班

public class TestJSONResource extends JerseyTest {

    @Override
    protected TestContainerFactory getTestContainerFactory() {
        return new GrizzlyTestContainerFactory();
    }

    @Path("test")
    public static class TestResource {
        @GET
        @Produces(MediaType.APPLICATION_JSON)
        public Response getJson() {
            Map<String, String> entity = Maps.newHashMap();
            entity.put("foo", "bar");

            Response response = Response.status(Response.Status.OK)
                    .entity(entity)
                    .type(MediaType.APPLICATION_JSON).build();
            return response;
        }
    }

    @Override
    protected DeploymentContext configureDeployment() {
        return DeploymentContext.builder(new ResourceConfig(TestResource.class))
                .contextPath("context1/context2")
                .build();
    }

    @Test
    public void testGet() {
        final WebTarget target = target("test");
        final String s = target.request().get(String.class);
        System.out.println(s);
    }
}
公共类TestJSONResource扩展了JerseyTest{
@凌驾
受保护的TestContainerFactory getTestContainerFactory(){
返回新的GrizzlyTestContainerFactory();
}
@路径(“测试”)
公共静态类TestResource{
@得到
@产生(MediaType.APPLICATION_JSON)
公共响应getJson(){
Map entity=Maps.newHashMap();
实体认沽期权(“foo”、“bar”);
Response=Response.status(Response.status.OK)
.实体(实体)
.type(MediaType.APPLICATION_JSON).build();
返回响应;
}
}
@凌驾
受保护的部署上下文配置部署(){
返回DeploymentContext.builder(新资源配置(TestResource.class))
.contextPath(“context1/context2”)
.build();
}
@试验
公共void testGet(){
最终WebTarget目标=目标(“测试”);
最终字符串s=target.request().get(String.class);
系统输出打印项次;
}
}

jersey media json jackson
提供了处理json的
MessageBodyWriter
MessageBodyReader
,这是为我们隐式注册的。

谢谢,grizzly2提供程序返回标准
{foo:“bar”}
而不是我的
{foo:“bar”}
jersey 2.6我的代码示例甚至不会编译。如果您需要进一步的帮助,您需要在您的帖子中包含更多信息,以便我们帮助您,即一个产生问题的完整示例(带有依赖项)
InternalServerErrorException
服务器错误可能意味着有关
InternalServerException
的任何内容:。你是对的,没有完整(或更具体)的例子,这是不可能帮助我的。再次感谢。提供商似乎没有使用2.6自动配置自己。使用您的测试,配置它工作
newresourceconfig(TestResource.class).register(JacksonJsonProvider.class)
register(JacksonFeature.class)