我需要向服务器端发送一个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不反序列化纯字符串数组