3

我将 CXF 与 JacksonJsonProvider 一起用于我的 REST 服务。我有一个测试方法如下

@POST
@Path("/book/{id}")
@Consumes({"application/json, multipart/form-data, application/x-www-urlencoded"})
@Produces({"application/json"})
public boolean setOwner(Book book) {
    System.out.println(book.getName());
    return true;
}

现在,如果我使用原始 JSON 字符串发出 POST 请求,如下所示

    {"Book":{"name":"Book name","publisher":"Book publisher"}}

请求得到正确处理,因为我在发出请求时使用 Content-Type 作为“应用程序/json”。

但是由于我正在与外部服务集成,因此我收到了 multipart/form-data 或 application/x-www-urlencoded ,杰克逊中没有任何 afaik 可以处理它。如果有人能指出我正确的方向,那就太好了。

我可以使用 Jettison(CXF 的一部分)管理 multipart/form-data,但我想使用 Jackson。

4

1 回答 1

0

差不多几年后,我一直想做同样的事情!使用一种方法处理多个 mime 时间我没有太多运气,但我确实使用两种方法让它工作,例如:

@POST
@Path("/book/{id}")
@Consumes({"multipart/form-data"})
@Produces({"application/json"})
public boolean setOwnerFromUpload(@FormDataParam("file") InputStream inputStream) {
    // decode
    final ObjectMapper mapper = new ObjectMapper();
    final Book book = (Book) mapper.readValue(inputStream, Book.class);
    System.out.println(book.getName());
    return true;
}

通过两种方法,jackson 现在可以处理两种不同的 mime 类型。

于 2013-12-18T14:02:37.127 回答