【问题标题】:Web Service accepting Object[]. What JSON it accepts?Web 服务接受 Object[]。它接受什么 JSON?
【发布时间】:2013-03-02 11:02:08
【问题描述】:

我正在编写一个应该接受类型 Object[] 的 Web 服务。通用性强,需要在不同场景下接受不同数量和类型的参数。

请求对象如下所示:

@XmlRootElement
public class SimilarityRequest {

    private Object[] params;
    private String similarity;

    public Object[] getParams() {
    return params;
    }

    public void setParams(Object[] params) {
    this.params = params;
    }  

    public String getSimilarity() {
    return similarity;
    }

    public void setSimilarity(String similarity) {
    this.similarity = similarity;
    }

}

这是网络服务:

@SessionScoped
@Path("/similarity/")
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
@Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
@Stateful
@StatefulTimeout(600000) // 10 minutes
public class SimilarityResource {


    @POST
    @Path("/")
    public List<SimilarityResult> universalSimilarity(JAXBElement<SimilarityRequest> sr) {

        Object[] params = sr.getValue().getParams();
        String similarity = sr.getValue().getSimilarity();

    }


}

我不知道在这种情况下它接受什么 json 作为参数?我试过"params":{5,10}"params":{"0":5,"1":10} 以及"params":[5,10]。有些东西会抛出 500 和 400 (错误的请求)。有什么想法吗?

【问题讨论】:

  • 请提供有关您的服务的更多详细信息,例如它是基于 SOAP 的服务还是 RESTful 服务。
  • 我添加了 WS 代码。它的 RESTful
  • 您使用的是泽西岛吗?在这种情况下,您可以摆脱 JAXBElement 注释
  • 不,我不是。对我的问题有帮助吗?
  • 这行不通。您绝对没有向 JSON 库提供有关如何反序列化数据的任何提示。最好将整个事情解组为Map&lt;String, Object&gt; 并处理它。

标签: java json web-services jakarta-ee


【解决方案1】:

我已经使用 Jersey 成功实现了服务,代码是一样的,我只是删除了 JAXBElement 包装器和 @XmlRootElement 注释。 WEB-INF.xml 文件必须包含包含 SimilarityRequest 类的文件夹 com.sun.jersey.config.property.packages 参数部分和 com.sun.jersey.api.json.POJOMappingFeature 参数必须为 true。 服务正确接收以下 json:

{ “相似度”:“测试”,“参数”:[5,10] }

对象数组包含两个整数值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-10
    • 1970-01-01
    • 1970-01-01
    • 2013-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    相关资源
    最近更新 更多