【问题标题】:Camel-CXF REST: How to send to CXF web service more than one parameter on payload in REST client?Camel-CXF REST:如何在 REST 客户端的有效负载上向 CXF Web 服务发送多个参数?
【发布时间】:2015-07-31 21:33:10
【问题描述】:

我有一个 CXF Web 服务,其中只有一个参数应该在有效负载上发送。所有其他参数都在 URL 上发送:

参数类:

class Book
{
    String name;
    String author;

    //getters, setters
}

服务:

@Post
@Path("/addBook/{roomId}/{bookId}")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
@WebResult(name = "addBookResponse")
public LibraryResponse addBook(
        @PathParam("roomId") @WebParam(name = "roomId") String roomId,
        @PathParam("bookId") @WebParam(name = "bookId") String bookId,
        @WebParam(name = "book") Book book);

我在 REST 客户端中发送的有效负载:

{
    "name":"War and Peace",
    "author":"Lev Tolstoy"
}

在这个简单的情况下它可以工作。 :)

现在,我有另一个 CXF Web 服务方法,其中包含两个应该在有效负载上发送的参数:

@PUT
@Path("/replaceBook/{roomId}/{bookId}")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
@WebResult(name = "replaceBookResponse")
public LibraryResponse replaceBook(
        @PathParam("roomId") @WebParam(name = "roomId") String roomId,
        @PathParam("bookId") @WebParam(name = "bookId") String bookId,
        @WebParam(name = "originalBook") Book originalBook,
        @WebParam(name = "newBook") Book newBook);

我应该发送什么作为有效负载?我已尝试发送以下有效负载,但没有成功。

[
    {
        "name": "The Da Vinci Code",
        "author": "Dan Brown"
    },
    {
        "name": "War and Peace",
        "author": "Lev Tolstoy"
    }
]

大概如下是如何做到的:

https://stackoverflow.com/a/13253070/784980

https://cwiki.apache.org/confluence/display/CXF20DOC/JAX-RS+Multiparts

https://ext2xhb.wordpress.com/2011/06/08/using-cxf-attachment-safely/

【问题讨论】:

    标签: java web-services rest apache-camel cxf


    【解决方案1】:

    试试这个:

    {
      "originalBook": {
        "name": "The Da Vinci Code",
        "author": "Dan Brown"
      },
      "newBook": {
        "name": "War and Peace",
        "author": "Lev Tolstoy"
      }
    }
    

    【讨论】:

    • 已经尝试过它和其他几个变种。获取org.codehaus.jackson.map.exc.UnrecognizedPropertyException: Unrecognized field "originalBook" (Class Book), not marked as ignorable
    • 您调用的方法是否正确?听起来您的方法需要一个 Book 对象,然后尝试查找 Books 属性 originalBook
    • @Germann Arlington 我不明白你的评论。 replaceBook(...) 需要两个 Book 对象(和几个路径参数),所以我正在尝试发送它们。异常只是意味着我作为有效负载发送的 JSON 的语法与预期的语法不匹配。它被解释为好像我试图发送一个具有两个字段的对象,originalBooknewBook。结论:建议的语法是错误的。
    • 但错误消息显示 Unrecognized field "originalBook" (Class Book) - 对我来说,这听起来像是在尝试将名为 originalBook 的参数映射到字段 inBook - 但是我可能记错了
    • @Germann Arlington 回答你的问题,我绝对确定我调用了正确的方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-18
    相关资源
    最近更新 更多