{
“名称”: “HelloWorld” 的
}
我会回到HelloWorld映射到它的Key到目前为止我见过的例子,但我只是很难找出每个标签做什么以及如何解析身体给出上述结果
@POST @Path("/SetFeeds") @Consumes(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON) @JsonCreator public String setFeed(String jsonBody,@Context UriInfo uriInfo){ ...Code to manipulate the body of the request return response; }
解决方法
MessageBodyReader
进行解析(或解组/反序列化/其他).有不同的读者可以处理不同的Content-Type.例如,如果您有Content-Type application / octet-stream,则有一个将解组为byte []或File或InputStream的阅读器.所以以下内容可以解决问题
@Consumes("application/octet-stream") public Response post(File file) {} // or `byte[]` or `InputStream`
话虽这么说,JAX-RS实现带有非常基本的“易于转换”格式的阅读器.例如,大多数请求都可以转换为String,因此您可以像使用当前代码一样免费获得大多数内容类型.
如果我们想要一些更复杂的数据类型,比如HelloWorld for Content-Type application / json,那么就没有标准的阅读器.为此,我们要么需要创建自己的阅读器,要么使用阅读器附带的库.幸运的是,Java中最流行的JSON框架Jackson已经实现了一个JAX-RS提供程序,它具有读取器和编写器(用于序列化).
现在,根据您正在使用的服务器/ JAX-RS实现,不同的实现在核心Jackson JAX-RS模块周围创建了光包装器.如果我知道您正在使用的JAX-RS实现,我可以推荐使用哪个包装器,或者您可以忘记包装器并使用基本的Jackson模块,这是
<dependency> <groupId>com.fasterxml.jackson.jaxrs</groupId> <artifactId>jackson-jaxrs-json-provider</artifactId> <version>2.2.3</version> </dependency>
以上是Maven依赖.如果您不使用Maven,那么基本上您需要下载所有这些罐子.
然后,您需要注册提供商.同样,这取决于您的JAX-RS实现以及如何处理资源类的配置.我需要查看您的应用程序配置(web.xml或Java代码)以及您正在使用的服务器来帮助解决这个问题.在大多数情况下,需要注册JacksonjsonProvider(读者和作者).
一旦你注册了它,你就需要了解Jackson如何处理序列化的基础知识.在最基本的层面上,杰克逊寻找JavaBean properties(基本的getter / setter)以匹配JSON属性.例如,如果你有这个bean属性
public class HelloWorld { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } }
JSON应该看起来像{“name”:“whatever”}. “name”键与bean属性相同.在Bean属性术语中,属性的名称是get / set之后的所有字母,第一个字母是小写的.
这就是它的全部内容.现在你可以做到
@Consumes("application/json") public Response post(HelloWorld helloWorld) { String name = helloWorld.getName(); // should == "whatever" return Response.ok(helloWorld).build(); // we can also return objects }
对于更复杂的JSON格式,您应该参考Jackson文档或在SO上提出问题.
就注册JacksonjsonProvider而言,如果遇到问题,请提供我要求的信息,即应用程序配置(web.xml或Java配置)和您正在使用的服务器.
也可以看看:
> JAX-RS Entity Provider了解有关读者和作家的更多信息
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。