【问题标题】:Rest With Spring Java使用 Spring Java 休息
【发布时间】:2017-11-24 07:05:32
【问题描述】:

我正在尝试将我的 Spring Bean 与我的 Rest 应用程序链接,但不能这样做。 我有一个简单的用户 Pojo,带有 id、姓名和职业 我的 UserDao 是

public static List<User> getAllUsers(){ 
  List<User> userList = null;  
  userList = new ArrayList<User>(); 
  ApplicationContext context= new ClassPathXmlApplicationContext("Beans.xml");
  User user=(User)context.getBean("hbean");
  userList.add(user); 
  return userList; 
} 

我的服务调用如下所示

UserDao userDao = new UserDao();  
@GET 
@Path("users") 
@Produces(MediaType.APPLICATION_XML) 
public List<User> getUsers(){ 
  return userDao.getAllUsers(); 
}  

这个方法不起作用,我在没有 Spring 的情况下尝试过(只需在 UserDao 中初始化构造函数,然后程序就可以正常工作)

即使我对此进行了相同的测试,并在控制台上打印,它也可以正常工作

public static void main(String[] args) {
  List<User> userList = null;  
  userList = new ArrayList<User>(); 
  ApplicationContext context=new ClassPathXmlApplicationContext("Beans.xml");
  User user=(User)context.getBean("hbean");
  userList.add(user); 
  userList.forEach(System.out::println);
}

如果上面的代码工作正常,那么部署后我的服务调用可能是什么问题。

【问题讨论】:

  • >这个方法不行
  • 堆栈跟踪 javax.servlet.ServletException: org.glassfish.jersey.server.ContainerException: java.lang.NoClassDefFoundError: org/springframework/context/ApplicationContext

标签: java spring rest


【解决方案1】:

使用 Spring 时,您很可能也使用 DI 框架。在您的服务中,您定义了以下内容:

  UserDao userDao = new UserDao();

因为这会导致 Spring 无法直接向该对象注入值和其他依赖项 - 这可能会导致错误。将实例更改为:

  @Resource
  UserDao userDao;

这可能会解决您的问题。如果没有 - 查看UserDao 的定义。它是否使用例如@Service@Component 或任何其他弹簧描述性注释进行注释?如果是这样 - 检查您的 beans.xml 是否实际包含配置,该配置暗示在定义 UserDao 的包位置中定义的类已配置。

【讨论】:

  • 堆栈跟踪 javax.servlet.ServletException: org.glassfish.jersey.server.ContainerException: java.lang.NoClassDefFoundError: org/springframework/context/ApplicationContext
  • 尝试在你的类路径中包含 spring-context
【解决方案2】:

您的代码存在许多问题。排名不分先后:

User user=(User)context.getBean("hbean");

您没有在您提供的代码中的任何地方定义一个名为“hbean”的 bean,并且 User 不应该是一个 bean。

public static List<User> getAllUsers()

为什么这个方法是静态的?在大多数用例中,您的 DAO 也将是 Spring 注入的 bean。

 ApplicationContext context=new ClassPathXmlApplicationContext("Beans.xml");

假设您已经将 DAO 转换为 bean,则无需再创建 ApplicationContext,这通常由 Spring Boot 或您的 servlet 容器调用的侦听器为您完成。

UserDao userDao = new UserDao();  

没有意义,因为您需要的方法是静态的,除非您已经进行了我上面建议的更改,在这种情况下您可能会执行以下操作:

@Autowired
private UserDao userDao;

所以我建议你先开始阅读一些(较旧的)Spring 教程,或者干脆放弃你编写的所有内容并使用 Spring Boot。

以下教程可能会有所帮助:

https://spring.io/guides/gs/rest-service/

https://spring.io/guides/gs/accessing-data-jpa/

【讨论】:

  • 堆栈跟踪 javax.servlet.ServletException: org.glassfish.jersey.server.ContainerException: java.lang.NoClassDefFoundError: org/springframework/context/ApplicationContext
猜你喜欢
  • 2017-07-03
  • 2017-12-28
  • 1970-01-01
  • 1970-01-01
  • 2016-04-02
  • 2015-04-25
  • 1970-01-01
  • 1970-01-01
  • 2021-04-19
相关资源
最近更新 更多