私の CXF ベースの REST レイヤーでは、Groovy オブジェクトのシリアライズ/デシリアライズに Jackson を使用しています。私が経験している問題は、setter メソッドを持たないプロパティの逆シリアル化を扱っています。Group オブジェクトのリストを返す getGroups() メソッドを持つドメイン オブジェクト Dashboard があります。シリアル化すると、このオブジェクトは "group" 属性を持つ JSON に適切に変換されます。JavaScript から更新用のオブジェクトを送信すると、JSON にはまだ「グループ」属性があります。このプロパティはドメイン オブジェクトで読み取り専用であるため、JSON を逆シリアル化するときに「グループ」プロパティを単純に無視したいと思います。
私は Jackson ミックスインを使用しているので、@JsonIgnore、@JsonGetter、および @JsonProperty アノテーションのさまざまな組み合わせを試しましたが、すべて役に立ちませんでした。プロパティがシリアル化時に使用できる場合、逆シリアル化で以下のエラーが発生します。「グループ」属性を削除することで JavaScript の JSON オブジェクトを消去できますが、サーバー側のソリューションを見つけたいと考えています。
Caused by: com.fasterxml.jackson.databind.JsonMappingException: Problem deserializing 'setterless' property 'groups': get method returned null (through reference chain: org.ozoneplatform.commons.server.domain.model.DashboardTemplate["groups"])
at com.fasterxml.jackson.databind.deser.impl.SetterlessProperty.deserializeAndSet(SetterlessProperty.java:114)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:198)
at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeUsingPropertyBased(BeanDeserializer.java:577)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObjectUsingNonDefault(BeanDeserializer.java:393)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:289)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:121)
at com.fasterxml.jackson.databind.ObjectReader._bind(ObjectReader.java:1169)
at com.fasterxml.jackson.databind.ObjectReader.readValue(ObjectReader.java:625)
at com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider.readFrom(JacksonJsonProvider.java:448)
at org.apache.cxf.jaxrs.utils.JAXRSUtils.readFromMessageBody(JAXRSUtils.java:1038)
at org.apache.cxf.jaxrs.utils.JAXRSUtils.processParameter(JAXRSUtils.java:614)
at org.apache.cxf.jaxrs.utils.JAXRSUtils.processParameters(JAXRSUtils.java:578)
at org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.processRequest(JAXRSInInterceptor.java:238)
逆シリアル化で読み取り専用プロパティを無視するように Jackson に指示するにはどうすればよいですか?
ありがとうございました、
マイケル