簡単な答え: JSONの場合はJackson、XMLの場合はJAXB
Play自体はモデルのマーシャリングに関するドキュメントを提供していませんが、ジョブを実行できるサードパーティのライブラリが付属しています。
JSON:
モデル:
public class User extends Model {
public String username;
public Long age;
@JsonIgnore
public String password; // field won't be marshalled
}
jackson のObjectMapper.writeValueAsString()メソッドを使用して JSON にマーシャリングします。
import org.codehaus.jackson.map.ObjectMapper;
//
ObjectMapper mapper = new ObjectMapper();
String jsonString = mapper.writeValueAsString(country);
JSON 出力:
{
"username" : "John Smith",
"age" : "25"
}
XML:
Play が内部でモデルのゲッターとセッターを生成する方法があるため、注意が必要です。コードには getter と setter は表示されませんが、実行時には存在します。
モデルでは、XmlAccessorTypeアノテーションをPROPERTYに設定することが重要です。これにより、基礎となるフィールドからではなく、 getter/setterからシリアル化するように JAXB に指示されます。
@XmlAccessorType(XmlAccessType.PROPERTY)
また、ルート XML ノードの名前を指定する@XmlRootElementアノテーションを追加する必要があります。
@XmlRootElement(name = "UserRoot")
フィールドを省略するには、@XmlTransientアノテーションを getter に追加する必要があります。ソース コードには getter がないため、省略したいフィールドごとに 1 つ追加する必要があります。
@XmlAccessorType(XmlAccessType.PROPERTY)
public class User extends Model {
public String username;
public Long age;
@JsonIgnore
public String password;
@XmlTransient // This means ignore this property
public String getPassword() {
return this.password;
}
}
マーシャリングは、JAXB クラスMarshallerおよびJAXBContextによって実行されます。
JAXBContext context = JAXBContext.newInstance(User.class);
Marshaller marshaller = context.createMarshaller();
// Use linefeeds and indentation in the outputted XML
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
marshaller.marshal(user, System.out);
出力:
<UserRoot>
<name>John Smith</name>
<age>25</age>
</UserRoot>
概要:
Play docs on XMLとPlay docs on JSONは json/xmlの操作に関する情報を提供しますが、 Marshallingの実行方法を説明する Play Docs はないようです。そのためには、サードパーティのライブラリとドキュメントを調べる必要があります。