我希望得到每个Json格式调用的键和值,并将它们用作 java对象,如String或Integer,在我将输入的休息客户端
{
“名称”: “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;

    }

解决方法

您需要了解的第一件事是如何完成请求正文解析.在JAX-RS中,使用 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,那么基本上您需要下载所有这些罐子.

你可以找到所有这些here.只需单独搜索它们.

然后,您需要注册提供商.同样,这取决于您的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了解有关读者和作家的更多信息

在JAX-RS中将JSON解组为Java POJO的更多相关文章

  1. JAX-RS获取打开连接时间

    我正在使用JAX-RS进行HTTP请求。是否有方法获取打开连接所需的时间?打开连接和读取响应似乎对调用函数是隐藏的。

  2. 如何使用基于JAX-RS的Restlet自动将@DefaultValue映射到枚举参数?

    解决方法如果你有一个枚举像:然后,为了让JAX-RS知道要返回的实例,您的查询参数必须是?animal=MEDIUM_DOG.查询参数的值被送到枚举的valueOf静态方法以获取实例.当然,如果你发送像鸟一样的东西它将无法匹配任何东西,它将无法正常工作,因为@QueryParam期望这样:ThetypeToftheannotatedparameter,fieldorpropertymusteither:–Beaprimitivetype–Haveaconstructorthatacceptsasingle

  3. java – 在TomEE上使用JAX-RS时的“无资源方法”

    使用库存TomEE,我无法获得简单的JAX-RS资源.我不断得到一个错误:资源类:packagecom.tensorWrench.test;web.xml中:的build.gradle:我尝试了一些排列,添加beans.xml,删除,更改注释的顺序,使用不同的JavaEE类编译依赖项.我一直都会遇到这个错误.解决方法看起来您的资源方法在范围上不公开.试试这个:

  4. 未设置getAttribute(“javax.servlet.request.X509Certificate”)(Spring,CXF,Jetty,JAX-RSv1.1)

    我已经在客户端尝试了其他一些实现,但没有任何改变.我究竟做错了什么?

  5. 在JAX-RS中将JSON解组为Java POJO

    我希望得到每个Json格式调用的键和值,并将它们用作java对象,如String或Integer,在我将输入的休息客户端{“名称”:“HelloWorld”的}我会回到HelloWorld映射到它的Key到目前为止我见过的例子,但我只是很难找出每个标签做什么以及如何解析身体给出上述结果解决方法您需要了解的第一件事是如何完成请求正文解析.在JAX-RS中,使用MessageBodyReader进行解

  6. java – 如何在JAX-RS异常上使用自定义消息设置40X错误?

    为什么,即使我改变了响应状态的类型,这个黄页总是一样的?

  7. java – JAX-RS,没有开销就映射到JSON?

    我可以自由地重新定义我的数据类,但我事先无法知道地图的键或大小.解决方法最简单的方法是使用List相反,Pair只是一个有两个属性的Javabean.

  8. java – 读取JAX-RS主体InputStream两次

    我有一个JAX-RS日志记录过滤器来记录请求和响应详细信息,如下所示:getBody()方法从InputStream中读取正文内容,但我需要做一些技巧,因为我无法重置此流.没有这个小技巧我的休息方法总是收到空的请求正文内容:有没有更好的方法来阅读身体内容?

  9. java – Jersey客户端/ JAX-RS和可选(不是默认)@QueryParam(客户端)

    不要使用@DefaultValue如果要将参数默认为特定值,请在参数中使用@DefaultValue注释:将null传递给您不想要的@QueryParam如果要使@QueryParam可选,则不应用@DefaultValue注释.要使用query参数传递值,只需正常传递值.如果您希望查询参数不显示,只需传递null!所以调用ServiceInterface.getEndpoint;要求:并调用ServiceInterface.getEndpoint;要求:和瓦拉!总结以上是DEVMAX为你收集整理的jav

  10. java – JAX-RS / Jersey资源路径是否值得继承?

    说我希望我的JAX-RS/Jersey应用程序公开以下URL:假设我希望/app成为父基础资源,/app/*成为“子”资源.以下是否会完成我正在寻找的URL策略(?

随机推荐

  1. js中‘!.’是什么意思

  2. Vue如何指定不编译的文件夹和favicon.ico

    这篇文章主要介绍了Vue如何指定不编译的文件夹和favicon.ico,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  3. 基于JavaScript编写一个图片转PDF转换器

    本文为大家介绍了一个简单的 JavaScript 项目,可以将图片转换为 PDF 文件。你可以从本地选择任何一张图片,只需点击一下即可将其转换为 PDF 文件,感兴趣的可以动手尝试一下

  4. jquery点赞功能实现代码 点个赞吧!

    点赞功能很多地方都会出现,如何实现爱心点赞功能,这篇文章主要为大家详细介绍了jquery点赞功能实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  5. AngularJs上传前预览图片的实例代码

    使用AngularJs进行开发,在项目中,经常会遇到上传图片后,需在一旁预览图片内容,怎么实现这样的功能呢?今天小编给大家分享AugularJs上传前预览图片的实现代码,需要的朋友参考下吧

  6. JavaScript面向对象编程入门教程

    这篇文章主要介绍了JavaScript面向对象编程的相关概念,例如类、对象、属性、方法等面向对象的术语,并以实例讲解各种术语的使用,非常好的一篇面向对象入门教程,其它语言也可以参考哦

  7. jQuery中的通配符选择器使用总结

    通配符在控制input标签时相当好用,这里简单进行了jQuery中的通配符选择器使用总结,需要的朋友可以参考下

  8. javascript 动态调整图片尺寸实现代码

    在自己的网站上更新文章时一个比较常见的问题是:文章插图太宽,使整个网页都变形了。如果对每个插图都先进行缩放再插入的话,太麻烦了。

  9. jquery ajaxfileupload异步上传插件

    这篇文章主要为大家详细介绍了jquery ajaxfileupload异步上传插件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  10. React学习之受控组件与数据共享实例分析

    这篇文章主要介绍了React学习之受控组件与数据共享,结合实例形式分析了React受控组件与组件间数据共享相关原理与使用技巧,需要的朋友可以参考下

返回
顶部