問題
- JSONFactoryUtil.looseDeserialize メソッドを使用する WAR ポートレットがあります。
- また、私たちのクラスはホワイトリストに登録されていると定義されています。 以下を参照してください。
json.deserialization.whitelist.class.names=\
com.liferay.portal.kernel.cal.DayAndPosition,\
com.liferay.portal.kernel.cal.Duration,\
com.liferay.portal.kernel.cal.TZSRecurrence,\
com.liferay.portal.kernel.internal.service.permission.ModelPermissionsImpl,\
com.liferay.portal.kernel.messaging.Message,\
com.liferay.portal.kernel.model.PortletPreferencesIds,\
com.liferay.portal.kernel.security.auth.HttpPrincipal,\
com.liferay.portal.kernel.service.ServiceContext,\
com.liferay.portal.kernel.util.HtmlEscapableObject,\
com.liferay.portal.kernel.util.GroupSubscriptionCheckSubscriptionSender,\
com.liferay.portal.kernel.util.LongWrapper,\
com.liferay.portal.kernel.util.SubscriptionSender,\
com.liferay.portal.kernel.util.SubscriptionSender$HTMLAtributeEscapableObject,\
com.liferay.portal.kernel.util.SubscriptionSender$URIEscapableObject,\
com.liferay.portal.kernel.util.Tuple,\
java.util.GregorianCalendar,\
java.util.Locale,\
java.util.TimeZone,\
sun.util.calendar.ZoneInfo,\
com.acme.MyClass
- しかし、このメソッドを使用すると、予想どおり com.acme.MyClass ではなく、 HashMap オブジェクトが取得されます。
解像度
- 期待される結果を得るために利用可能な別の方法があります。
JSONFactoryUtil.deserialize(String json)
- このメソッドは、プロパティを使用する逆シリアル化手順を提供します
json.deserialization.whitelist.class.names
- 参照された方法に対して
JSONFactoryUtil.looseDeserialize(String json)
そのプロパティを使用しません。 その結果、デシリアライズ手順は完了しません。
- したがって、 JSONFactoryUtil.deserialize(String json) メソッドを使用する必要があります。