Iは次のように定義されたクラスがある:@XmlElementの名前変更の影響を元に戻してjsonをアンマーシャリングしますか?
public class Contact implements Serializable
{
private final static long serialVersionUID = 1L;
@XmlElement(name = "last-name", required = true)
protected String lastName;
@XmlElement(name = "first-name", required = true)
protected String firstName;
@XmlElement(required = true)
protected String id;
@XmlElement(name = "primary-phone")
protected String primaryPhone;
@XmlElement(name = "cellular-phone")
protected String cellularPhone;
}
このクラスは、インターネットを介して通信されるマーシャリングJSONバージョンを生成するために使用されています。受信側ではJSONをアンマーシャルしようとしていますが、名前の違いにより難しいです。たとえば、アンマーシャリングライブラリではprimaryPhone
という名前の変数が必要ですが、受信側にあるのはprimary-phone
ではありません。
primary-phone
のインスタンスをprimaryPhone
に手動で置き換えるために受け取ったJSONテキストを前処理する以外にも、この問題を回避するための自動化された方法がいくつかありますか?手動で文字列を変換する際の問題は、明日、クラス定義が変更された場合、私が書いているコードも更新する必要があるということです。
String contact = "\"last-name\": \"ahmadka\"";
ObjectMapper objMapper = new ObjectMapper();
Contact cObj = objMapper.readValue(contact, Contact.class);
しかし、上記のコードで、私はこれ読んで、最後の行に例外を取得:
com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "last-name" (class Contact), not marked as ignorable (5 known properties: "lastName", "cellularPhone", "id", "primaryPhone", "firstName", ])
at ...........//rest of the stack
を設定上記の依存関係を確認してから、 'mapper.registerModule(new JaxbAnnotationModule());)を呼び出す前にアンマーシャリングする必要があります。 – Ahmad
はい。それは '@XmlElement'を認識し、' lastName'の代わりにJSONをマップするために 'last-name'を使用します。 –