在Spring Boot中使用ECache时,我应该指定键类型和值类型吗?



我看过很多文章,其中指定了这些参数,像这样:

<cache alias="dishDTOs" uses-template="default">
<key-type>java.lang.Integer</key-type>
<value-type>com.topjava.graduation.restaurant.dto.DishResponseDTO</value-type>
</cache>

但这有什么意义呢?即使没有它们,一切似乎都可以工作,而且,如果我指定了这些,我有这个异常

Invalid value type, expected : com.topjava.graduation.restaurant.dto.DishResponseDTO but was : java.util.ArrayList

正在测试的方法(只需逐一调用这两个):

@Cacheable(value = "dishDTOs", key = "-2")
public List<DishResponseDTO> getAll() {
// code
}
@Cacheable(value = "dishDTOs", key = "#dishId")
public DishResponseDTO getOne(int dishId) {
// code
}

您可能应该使用两个不同的缓存。在第一种情况下,您试图将列表(getAll方法的返回类型)保存到为单个DishResponseDTO指定的缓存中。这就是为什么会出现异常。

如果你不指定类型,缓存将假定Object,所以你不会有任何类型安全。例如,请参阅Ehcache docs。

相关内容

  • 没有找到相关文章

最新更新