当前位置: 首页 > 知识库问答 >
问题:

当从同一个类调用方法时,有效的不工作Spring启动

葛胡媚
2023-03-14

我的车型带有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()
  }

}

当我从控制器Valid调用addCar时工作正常,但是当我从同一个服务类中的方法调用它时,它不验证汽车模型。

我从控制器调用addCars

这个怎么解决?我应该做些什么来使它工作呢?我必须对代码进行哪些更改?

共有1个答案

卢英范
2023-03-14

首先,您需要了解Spring是如何调用验证器的。如果您查看Spring验证启动器,您会看到它定义了bean后处理器,该处理器使用代理对象包装所有带有有效注释的bean,并添加了拦截具有有效参数的方法的方面。因此,当验证的bean/service被注入到依赖对象时,代理被注入。然后当调用服务方法时,调用被拦截,并对每个有效参数执行验证器。返回值也会发生同样的情况。话虽如此,问自己一个问题:在哪个实例上调用addCars方法?代理还是真实bean?

这里的问题是addCar方法没有被截获,因为是由< code>this实例直接调用的

 类似资料:
  • 从同一bean的另一个方法调用缓存的方法时,Spring缓存不工作。 这里有一个例子来清楚地解释我的问题。 配置: 缓存服务: 结果: 方法调用在第二次调用中使用缓存。但是,当在AService类中调用方法时(在中),Cache未被使用。 这就是SpringCache的工作原理还是我遗漏了什么?

  • 主课 工具类 考试班 输出: 我试图嘲笑util无效的方法调用与do没什么,但不工作。有人能帮我解决吗?我在我们的应用程序中遇到了类似的功能。

  • 问题内容: 从同一bean的另一个方法调用缓存的方法时,Spring缓存不起作用。 这是一个示例,可以清楚地说明我的问题。 组态: 缓存的服务: 结果: 该方法调用使用缓存在第二次调用预期。但是,在类中()中调用该方法时,则未使用Cache。 这是Spring缓存的工作方式还是我缺少什么? 问题答案: 我相信这是这样的。从我记得阅读的内容来看,生成了一个代理类,该代理类可以拦截所有请求并使用缓存的

  • 问题内容: 我是Spring Transaction的新手。我发现有些事情很奇怪,也许我确实理解得很清楚。我想在方法级别周围进行事务处理,而我在同一个类中有一个调用者方法,似乎不喜欢它,必须从单独的类中调用它。我不知道怎么可能。如果有人知道如何解决此问题,我将不胜感激。我想使用相同的类来调用带注释的事务方法。 这是代码: 问题答案: 这是Spring AOP(动态对象和cglib)的局限性。 如果

  • 问题内容: 我是python的新手。我试图在类中将值从一种方法传递给另一种方法。我搜索了该问题,但无法获得适当的解决方案。因为在我的代码中,“ if”正在调用类的方法“ on_any_event”,而该方法反过来应该调用我的另一个方法“ dropbox_fn”,该方法利用了“ on_any_event”中的值。如果“dropbox_fn”方法在类之外,它将起作用吗? 我将用代码说明。 这里的主要问

  • 问题内容: 我是Spring Transaction的新手。我发现有些事情很奇怪,也许我确实理解得很清楚。我想在方法级别周围进行事务处理,而我在同一个类中有一个调用者方法,似乎不喜欢它,必须从单独的类中调用它。我不知道怎么可能。如果有人知道如何解决此问题,我将不胜感激。我想使用相同的类来调用带注释的事务方法。 这是代码: 问题答案: 这里的问题是,Spring的AOP代理不会扩展,而是包装你的服务