私たちは奇妙な問題に直面しています。何が起こっているのか理解していないし、他の誰かがすでに同じ問題を抱えていて、spring boot @Cachable null値でいっぱいのスーパークラスのすべてのフィールドを返す
我々は@Cachableを利用して、簡単なRESTサービスを書いた:
@GetMapping(value = "/get/{" + PARAM_TENANT + "}/{" + PARAM_UID + "}")
@Cacheable(value = GET_ORDERS_BY_UID)
public GetOrdersResponseDto getOrdersByUid(@PathVariable final String tenant, @PathVariable final String uid) {
....
return new GetOrdersResponseDto(createCacheKey(), orderResponseDtos);
}
GetOrdersResponseDtoは、いくつかのフィールドで構成されています。カスタムクラスのインスタンス、それらのリスト、その他の単純なプリミティブ値が含まれているものもあります。
キャッシュからGetOrdersResponseDtoレスポンスが提供されると、リスト内に格納され、オブジェクトスーパークラスに格納されているオブジェクトのすべてのフィールドがNULL値で埋められます。
私たちはキャッシュの実装としてヘイゼルキャストを使用しています。次のように
@Component
public class HazelcastConfig extends Config {
@Autowired
public HazelcastConfig(final ConfigClient configClient) {
super();
final GroupConfig groupConfig = getGroupConfig();
final String name = configClient
.getConfigPropertyValueOrThrow("public", "com.orderservice.hazelcast.group.name");
groupConfig.setName("foogroup");
final String password = configClient
.getConfigPropertyValueOrThrow("public", "com.orderservice.hazelcast.group.password");
groupConfig.setPassword(password);
レスポンスクラスが見えます:
public class GetOrdersResponseDto implements Serializable {
private String cacheSerial;
private List<OrderResponseDto> orderResponseDtos;
}
と問題がOrderResponseDtoのスーパークラスの一部であるOrderResponseDtoのフィールドに対してのみ発生し、当社のキャッシュ設定は非常に基本的です。
私はこの奇妙な行動の原因を誰かに知らせることができますか?
編集:私は、これは、Javaの動作です
GetOrdersResponseDtoクラスも共有できますか?そして、 '問題はリスト内に格納されているオブジェクトに対してのみ発生します。 'ということはどういう意味ですか? –
コードを追加して物事を明確にしようとしました。私たちが使用しているdtosの(共有された)スーパークラスの使用を取り除くことでした... – xstring
@xstringこれはあなたが元々望んでいた方法でこれまで作業しましたか? ( 'GetOrdersResponseDto'は他のオブジェクトのリストを含んでいます)。これはうまくいくはずですが、そうでない場合は、もう少しサンプルがあれば問題の特定に役立ちます。 'GetOrdersResponseDto'は' Serializable'なので、その中にあるものはすべて –