如何区分对象null和moxy中未在json中给出的对象

时间:2014-01-07 03:02:11

标签: jaxb moxy

现在我正在做一个使用restful的项目。在put方法中,如果客户端将json发送到服务器。如果json中没有给出对象,我们认为客户端不想修改对象,否则设置为null。 wo必须修改为null。但是现在我遇到了一个问题,如何区分对象null和moxy中没有给出的对象。

public class Person{
String id;
String name;
}

{
 "id":"1",
 "name":null,

}

相同
{
 "id":"1"
}

@Blaise Doughan你可以帮助我

1 个答案:

答案 0 :(得分:0)

默认情况下,EclipseLink JAXB (MOXy)不会封送具有null值的映射字段/属性。您可以通过将null@XmlElement(nillable=true)映射来告诉MOXy编组null值。我在这里详细介绍了这个:

如果您想在默认null值和明确设置为@XmlIsSetNullPolicy的值之间进行区分,那么您将需要跟踪它。跟踪后,您可以使用MOXy的import javax.xml.bind.annotation.XmlElement; import org.eclipse.persistence.oxm.annotations.XmlIsSetNullPolicy; import org.eclipse.persistence.oxm.annotations.XmlMarshalNullRepresentation; public class Root { @XmlElement private String foo; @XmlElement(nillable = true) private String bar; private String baz; private boolean bazSet; @XmlIsSetNullPolicy(isSetMethodName="isBazSet", nullRepresentationForXml=XmlMarshalNullRepresentation.XSI_NIL) public String getBaz() { return baz; } public void setBaz(String baz) { this.baz = baz; this.bazSet = true; } public boolean isBazSet() { return bazSet; } } 进行映射。

Java模型

import java.util.*;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import org.eclipse.persistence.jaxb.JAXBContextProperties;

public class Demo {

    public static void main(String[] args) throws Exception {
        Map<String, Object> properties = new HashMap<String, Object>(2);
        properties.put(JAXBContextProperties.MEDIA_TYPE, "application/json");
        properties.put(JAXBContextProperties.JSON_INCLUDE_ROOT, false);
        JAXBContext jc = JAXBContext.newInstance(new Class[] {Root.class}, properties);

        Marshaller marshaller = jc.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);

        Root root = new Root();
        marshaller.marshal(root, System.out);

        root.setBaz(null);
        marshaller.marshal(root, System.out);
    }

}

演示代码

<强>演示

foo

<强>输出

在下面的输出中,我们看到:

  1. bar没有被整理出来。
  2. baz正在编组。
  3. null在未设置时未进行编组,并且在设置时进行编组,即使该值均为{ "bar" : null } { "bar" : null, "baz" : null }
  4. {{1}}