【问题标题】:how to send JS property Array to Jersey JAX-RS JSON based REST web service如何将 JS 属性数组发送到 Jersey JAX-RS 基于 JSON 的 REST Web 服务
【发布时间】:2015-06-23 07:23:50
【问题描述】:

我需要向服务器端发送一个 JS 字符串数组,作为 JS 对象字段的一部分,例如:

JSON:

{prodName: "abc123", prodImages: ["a1", "a2", "a3"]}

我正在使用 Jersey JAX-RS 来使用 JSON 输入。 在我的服务器端代码中,我有:

Web服务方法签名:

@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
@Path("/delete")
public void deleteMethod(ProdListVO prodListDeleteVO) //...

JAX-B 对象:

@XmlRootElement
public class ProdListVO {   

    private String prodName;
    private String[] prodImages;

// ... getters and setters

prodName 设置正确,而 prodImages 为空。 Jersey 是否有任何正确的 JSON 格式可以理解为有效的 Array 或 List of String ?

【问题讨论】:

  • 您是否尝试过使用 Collection 而不是 []。 (这就是我正在使用的)
  • 默认 JSON 提供程序是 Moxxy。也许尝试使用杰克逊,你在做什么应该没有问题。当迁移到 Jersey 2.X 时,我尝试了 Moxxy,我发现 List 必须被包装, Map 只是不支持等等。我用 Jackon 替换它并且从来没有任何(de)序列化问题。
  • @Danielson 我尝试使用 Collection 和 List 以及 String[] 都没有工作

标签: javascript java json jersey jax-rs


【解决方案1】:

尝试使用:

{ "prodName": "abc123", "prodImages": ["a1", "a2", "a3"]}

还包括以下依赖项:

    <dependency>
        <groupId>org.glassfish.jersey.media</groupId>
        <artifactId>jersey-media-moxy</artifactId>
    </dependency>

【讨论】:

    【解决方案2】:

    怎么样:

    休息类:

    @DELETE
    @Consumes(MediaType.APPLICATION_XML)
    @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
    @Path("/delete")
    public Response callMokuSimple(final JAXBElement<ProdListVO> prodListDeleteVO) {
        ProdListVO prodList =  prodListDeleteVO.getValue();
        // more code
    }   
    

    JAXB 类:

    @XmlAccessorType(XmlAccessType.FIELD)//lets you decide the fields
    @XmlRootElement(name="algorithm")
    public class Algorithm implements Serializable{
        private static final long serialVersionUID = -1L;
        @XmlElement(name="prodName")//name of field
        private String prodName = null;
        @XmlElement(name="prodImages")//name of other field
        private String [] prodImages = null;
    
        //getter and setters
    }
    

    【讨论】:

      【解决方案3】:

      将 EclipseLink JAXB Moxy 升级到 2.6 版后,它根据问题的解决方案解决了问题:

      Moxy, JSON and Jersey 2.0 does not deserialize plain String array

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多