Spring MVC ModelAttribute(Person)とJacksonの助けを借りて、HTMLフォームからxmlを作成します。Jackson xmlはシリアル化時に空のオブジェクトを無視します
形態:
....
<input name="name"/>
<input name="birthday"/>
<input name="address.street/>
<input name="address.city/>
....
POJO:
@JacksonXmlRootElement(localName = "person")
@JsonInclude(Include.NON_DEFAULT)
public class Person implements Serializable {
@JsonIgnore
private Long id;
@JacksonXmlProperty(localName = "name")
private String name;
@JacksonXmlProperty(localName = "email")
private String email;
@JacksonXmlProperty(localName = "address")
private Address address;
private String birthday;
//getter and setter
}
@JsonInclude(Include.NON_EMPTY)
public class Address implements Serializable {
private Long id;
private String street;
private String streetNumber;
private String postalcode;
private String city;
//getter and setter
}
は、コントローラ内のXMLを作成する:
@RequestMapping("saveperson")
public String savePerson(@ModelAttribute final Person person, final ModelMap model) {
final ObjectMapper xmlMapper = new XmlMapper();
final String xml = xmlMapper.writeValueAsString(person);
return "redirect:/listpersons";
}
出力XML:
<person>
<name>John</name>
<email>[email protected]</email>
<address/>
</person>
を
空のオブジェクトをXMLから除外するにはどうすればよいですか?
私はnullにModelAttribute内のすべての空の文字列を設定しようとしました:
@InitBinder
public void initBinder(WebDataBinder binder) {
binder.registerCustomEditor(String.class, new StringTrimmerEditor(true));
}
しかし、それは動作しません。 私も試しました @JsonInclude(Include.NON_EMPTY)と@JsonInclude(Include.NON_NULL) しかし、XMLには常に空のオブジェクトが含まれています。
私の2番目の質問は次のとおりです。アドレスのリストをhtml形式にバインドするとき。これを行う最善の方法は何ですか?
....
<input name="name"/>
<input name="birthday"/>
<input name="address1.street/>
<input name="address1.city/>
<input name="address2.street/>
<input name="address2.city/>
....
@JacksonXmlRootElement(localName = "person")
@JsonInclude(Include.NON_DEFAULT)
public class Person implements Serializable {
@JsonIgnore
private Long id;
@JacksonXmlProperty(localName = "name")
private String name;
@JacksonXmlProperty(localName = "email")
private String email;
@JsonIgnore
private Address address1;
@JsonIgnore
private Address address2;
//add address1 and address2 in the getter or dto for the ModelAttribute?
@JacksonXmlElementWrapper(localName = "addresses")
@JacksonXmlProperty(localName = "address")
private List<Address> address;
private String birthday;
//getter and setter
}
ありがとうございます!
ありがとうございます!それはうまく動作します:-) – chrisishere