从JAX-RS中的post检索数据

时间:2015-07-04 16:27:51

标签: java rest jax-rs

服务器以JSON格式发送数据作为HTTP POST,我使用jax-rs来处理和检索数据。

我可以根据我的需要使用@Pathparam或@queryparam,但数据并不喜欢其中任何一个。如果我是对的,也不在标题中,因为它们包含内容类型,日期和类似排序的内容。如何从POST检索数据?

@POST
@Path("/foo")
public void foo(){ //do i need to put sth in parameter paranthesis to get?
    //handle the data!! but how??
}

1 个答案:

答案 0 :(得分:5)

我建议你看看JAX-RS Entity Providers。我将向您解释如何分别对响应和请求流进行编组和解组。

基本上你有MessageBodyReaderMessageBodyWriter s(前者是来自请求流的unmarshall。工程怎么说你有这样的方法

@POST
@Consumes(MediaType.TEXT_PLAIN)
public Response postString(String s) {}

String s与任何其他没有注释的方法参数一样,被视为请求的主体。 (注意一个方法只能有一个非注释参数;即一个请求只能有一个主体)。所以会发生什么是JAX-RS(实现)运行时将通过提供程序的注册表(确切地说是MessageBodyReader)来查找可以处理将text/plain类型的主体解组为{ {1}}。某些标准类型有一些标准阅读器,这是免费提供的阅读器。

现在在JSON的情况下,说我们有这个

String

这也可以,因为有一个编写者可以处理这个问题。基本上,String参数可以在大多数时间处理。将InputStream变为String并不困难,String参数我们通常会获得免费支持。

但是如果我们想要一个不同类型的unmarshal,比如说@POST @Consumes(MediaType.APPLICATION_JSON) public Response postJson(String json) {}

Foo

我们有像JSON一样的

class Foo {
    String bar;
    String baz;
}

@POST
@Consumes(MediaType.APPLICATION_JSON)
public Response postJson(Foo foo) {}

我们可以做到这一点,但我们需要一个自定义阅读器。幸运的是,有一些已经存在。我们只需要将库依赖项添加到项目中。例如,Jackson(我说Java中事实上的JSON处理器)为我们提供了一个阅读器。它在依赖

{ "bar" : "barValue", "baz": "bazValue" }

我们可以将<dependency> <groupId>com.fasterxml.jackson.jaxrs</groupId> <artifactId>jackson-jaxrs-json-provider</artifactId> <version>2.5.0</version> </dependency> 注册到我们的应用程序中。然后我们将能够使用JSON中的POJO。 (有关注册的更多帮助,请提供有关您正在使用的JAX-RS实现的更多信息,并显示您的应用程序配置,无论是web.xml还是Java配置)

部分资源: