休息与春天Java

时间:2017-11-24 07:05:32

标签: java spring rest

我正在尝试将我的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);
}

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

2 个答案:

答案 0 :(得分:0)

使用Spring时,您最有可能使用DI框架。在您的服务中,您有以下定义:

  UserDao userDao = new UserDao();

由于这会导致Spring无法直接向该对象注入值和其他依赖项 - 这可能会导致错误。将这种变化改为:

可能是一个好主意
  @Resource
  UserDao userDao;

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

答案 1 :(得分:0)

您的代码存在许多问题。没有特别的顺序:

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/