簡體   English   中英

當從同一個 class 調用方法時,有效不工作 spring 啟動

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM