如何将JS属性Array发送到Jersey JAX-RS基于JSON的REST web服务



我需要向服务器端发送一个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

prodImages为null时,prodName设置正确。Jersey是否将任何合适的JSON格式理解为有效的数组或字符串列表?

尝试使用:

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

还包括以下依赖项:

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

怎么样:

RestClass:

@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
}

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

Moxy、JSON和Jersey 2.0不反序列化纯字符串数组

最新更新