[英]Spring boot Redis @Cacheable method not getting called from another class
[英]valid not working spring boot when method is called from same class
我的車 model 帶 bean 驗證
@Document(collection = "Cars")
public class Car {
public static final String NAME = "car";
@Id
private String id;
@NotBlank(message = "Brand name should n't be empty")
@CsvBindByName(column = "Car Brand")
private String brand;
@NotBlank(message = "Model name should n't be empty")
@CsvBindByName(column = "Car Model")
private String model;
}
汽車服務
@Service
@Validated
public class CarServices {
@Autowired
CarRepo repo;
public Car addCar(@Valid Car car, String traceId) {
//save to repo
}
}
public HashMap<String, Object> addCars(MultipartFile file, String traceId) {
//reading csv and passing each car object to addCar
Call to addCar()
}
}
當我從 controller 調用 addCar 時,Valid 工作正常,但是當我從同一服務 class 中的方法調用它時,它沒有驗證汽車 Z20F35E630DAF44DBFA4C3F68F5399D8Z。
我從 controller 打電話給 addCars
如何解決這個問題?我應該怎么做才能做到這一點? 我必須對代碼進行哪些更改?
首先,您需要了解 spring 如何調用驗證器。 如果您查看 spring 驗證啟動器,您將看到它定義了 bean 后處理器,該處理器使用代理 object 包裝所有使用有效注釋注釋的 bean,並添加了攔截具有有效參數的方法的方面。 因此,當將經過驗證的 bean/service 注入依賴的 object 時,會改為注入代理。 然后當調用服務方法時,調用被攔截,並且為每個有效參數執行驗證器。 返回值也是如此。 說了這么多,問自己一個問題:在哪個實例上調用 addCars 方法? 代理還是真正的bean?
這里的問題是 addCar 方法沒有被攔截,因為是this
實例直接調用的
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.