将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的序列化
- 阅读更多关于
<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)