【问题标题】:Jersey RESTfull service with XML (encapsulation outside the JSON-Object needed)带有 XML 的 Jersey RESTfull 服务(需要在 JSON 对象之外进行封装)
【发布时间】:2011-11-16 19:24:18
【问题描述】:

我尝试与 Jersey 一起用 Java 实现一个宁静的 web 服务。 为了在客户端和服务器端之间进行通信,我正在注意 XML。 我已经尝试过 JSON。

使用 JSON 时,封装在 POJO-Object 中,如:

@XmlRootElement
public class MyPojo {
    public int a;
    public int[] b;
}

然后我刚刚在 Rest-Class 中得到一个标题

public String classname(MyPojo p)

但我需要一个像

这样的标题
public String classname(int a, int [] b)

通过读取 Rest-Headers 来自动创建 Form-Elements。 一个例子告诉我:

@Consumes("application/xml")
public classname methodname(@QueryParam("a") Integer a, @QueryParam("b") IntArray b)

应该可以。 问题:如何为此方法创建 XML 请求(如 XML 中的 JSON.stringify())?有没有更好的方法来做到这一点?

【问题讨论】:

    标签: java xml json rest jersey


    【解决方案1】:

    不确定我是否理解这个问题,但会尝试提供一些提示 - 希望至少其中一些是相关的。如果没有,请分享更多关于您的应用的信息(即这是用于 GET 还是 POST 请求?为什么拥有 2 个单独的参数等很重要)

    如果您需要在请求实体中发送 XML 或 JSON(例如,在 POST 请求中),则无法在多个参数中检索这些 - 您必须像上面那样使用单个对象参数。您可以执行以下操作:

    @POST
    @Consumes("application/xml")
    public ClassName postMethod(MyPojo p) {
        return postMethod(p.a, p.b);
    }
    
    public ClassName postMethod(int a, int[] b) {
        // do something
    }
    

    或者,如果您真的不需要 XML/JSON,如果您使用 HTML 表单进行 POST,通常您会执行以下操作:

    @POST
    @Consumes("application/x-www-form-urlencoded")
    public ClassName postMethod(@FormParam("a") Integer a, @FormParam("b") String b /*I think arrays are not supported - will have to parse it yourself*/) {
        // do something
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-03
      • 1970-01-01
      相关资源
      最近更新 更多