簡體   English   中英

如何將JS屬性數組發送到基於Jersey JAX-RS JSON的REST Web服務

[英]how to send JS property Array to Jersey JAX-RS JSON based REST web service

我需要將JS字符串數組發送到服務器端,作為JS Object字段的一部分,例如:

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
}   

JAXBClass:

@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不會反序列化純字符串數組

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM