我看过很多文章,其中指定了这些参数,像这样:
<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。