【问题标题】:How to receive json object in the RESTful (WEB SERVICE) POST method in Java如何在Java中的RESTful(WEB SERVICE)POST方法中接收json对象
【发布时间】:2015-02-11 07:26:05
【问题描述】:

这可能有点愚蠢的问题,但我很困惑是否可以在 RESTful webservice 下的 POST 方法中接收 @FormParam 中的 JSON 对象

@POST
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
@Path("/fetch/")
public List<MyObject> getCandidate(@FormParam("CodeList")
List<String> codeList)
{
    List<MyObject> myobjects = null;
    try {
        //some code
    } catch (Exception e) {
        //some exception if occur 
    }
    return myobjects;
}

如果我想获取表单参数中的用户定义对象怎么办。

@POST
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
@Path("/fetch/")
public List<MyObject> getCandidate(@FormParam("CodeList")
List<MyObject> formMyObjectList)
{
    List<MyObject> myobjects = null;
    try {
        //some code
    } catch (Exception e) {
        //some exception if occur 
    }
    return myobjects;
}

提前致谢。

【问题讨论】:

  • 嗯,你试过了吗?提示:无论如何它都可以使用@POST
  • 您需要将其作为字符串获取并自行解组,或者编写 MessageBodyReader。前者可能更容易,见here。尝试使用另一个类型方法参数,您将需要一个自定义提供程序。否则,你为什么要接受它作为表单参数呢?使用表单参数,你应该@Consume("application/x-www-form-urlencod")。如果你想要application/json,那么只需将正文作为 JSON 发送
  • 感谢 Smutje 的回复。如何通过将整个对象发送到 REST 来检查相同的内容。我有很多数据要接收,所以我不想为对象的每个单独元素使用@FormParam。我想将它作为一个完整的对象接收,以便我可以对其执行登录。
  • 能否提供你的Controller的代码

标签: java json web-services


【解决方案1】:

这是可能的,但是您需要了解什么是 @FormParam,基本上它从特定的 html 表单接收值,因为您可能知道 @FormParam 需要知道您想使用 @FormParam 从请求中获取的参数是什么("myParam"),如果你想使用 json,你需要提供它。所以答案是你不需要使用@FormParam 来消费 JSON

上述方法不是发送一对键/值属性,而是您需要发送完整的 json,显然您需要使用可能的 jquery 甚至 javascript 生成该 json,然后将其发送到您应该类似的端点。

@POST
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
@Path("/fetch/")
public List<MyObject> getCandidate(MyBean mybean){}

MyBean 类需要包含将在 JSON 中发送的字段。这里的神奇之处在于MessageBodyReader,你的类路径中应该有jackson,你可以找到一个例子here。如果您阅读this,这也是个好主意。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-05
    • 2019-08-23
    • 2017-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多