应用程序在 springboot 中运行失败 Unsatisfied dependency

如何解决应用程序在 springboot 中运行失败 Unsatisfied dependency

我是 Spring 开发的初学者。我尝试使用 Spring Boot 2.4.1。激活我为用户创建的激活链接,但它给了我以下错误

Error starting ApplicationContext.To display the conditions report re-run your application with 'debug' enabled.
2021-01-10 00:07:22.711 ERROR 9560 --- [  restartedMain] o.s.boot.SpringApplication               : Application run Failed at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject

这是我的代码:(存储库)

@Repository
public interface UsersRepositor extends JpaRepository<Users,Integer> {
    public Users findByEmail(String email);
    public Users findByToken(String token);
    @Query("update  Users U set U.active=true where U.token =:token and u.id:id")
    @Modifying
    @Transactional
    public void activeUsersByTokenAndId(@Param("token")String token,@param("id")int id);

}

这是我的代码:(控制器)

@Controller

public class ActivationController {
   @Autowired
    UsersRepositor usersRepositor;

@GetMapping(value = "/activation/{token}")

        public String activeUsersByToken(
            @PathVariable("token")String token
    ){
        Users users=usersRepositor.findByToken(token);
        if (users !=null){
            usersRepositor.activeUsersByTokenAndId(token,users.getId());
        }

        return "redirect:/login";
    }

}

解决方法

要使用 Spring Boot 最好的方法是使用/导入 spring boot starter 依赖项,请参阅 pom.xml 定义示例。

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.3.RELEASE</version>
        <relativePath /> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>11</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

在您的示例中,我进行了一些更改,请参见下文:

通常域对象的名称是单数,使用User代替Users

@Entity
public class User {

   @Id
   ...
   private Integer id;

   private String token;

   ...
   
   //Getters and Setters
}

更改存储库以删除@Transactional 并修复@param(较低)和查询错误。

@Repository
public interface UserRepository extends JpaRepository<User,Integer> {
    public User findByEmail(String email);
    public User findByToken(String token);
    
    @Query("update  User u set u.active = true where u.token = :token and u.id = :id")
    @Modifying
    public void activeUserByTokenAndId(@Param("token")String token,@Param("id")int id);

}

添加服务实现

@Service
public class UserService {

   private final UserRepository userRepository;

   public UserService(final UserRepository userRepository){
      this.userRepository = userRepository;
   }

   @Transactional
   public void activeUser(final String token){
      User user= userRepository.findByToken(token);
      if (users ==null){
         // TODO throw exception like
         // throw new UserNotFoundException();
      }
      this.userRepository.activeUserByTokenAndId(token,id);
   }
}

更改控制器以使用服务

@RestController
public class ActivationController {
   
   private final UserService userService;

   public ActivationController (final UserService userService){
      this.userService = userService;
   }

   @GetMapping(value = "/activation/{token}")
   public String activeUsersByToken(@PathVariable("token")String token){
        userService.activeUser(token);
        
        return "redirect:/login";
    }

}

运行应用程序

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class,args);
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?