0

我正在编写一个应该接受类型 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 (错误的请求)。有任何想法吗?

4

1 回答 1

0

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

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

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

于 2013-03-02T14:30:30.163 回答