java – 使用SseEmitter的Spring rest服务
发布时间:2020-12-15 04:32:29 所属栏目:Java 来源:网络整理
导读:当我在服务器上调用控制器时,我正在尝试通知一个简单的html页面.我有一个 Android应用程序调用我的控制器,当这完成后,我想通知我的网页控制器被调用. 这是我的一些代码: @RequestMapping("/user") public class UserController { /** * Returns user by id.
当我在服务器上调用控制器时,我正在尝试通知一个简单的html页面.我有一个
Android应用程序调用我的控制器,当这完成后,我想通知我的网页控制器被调用.
这是我的一些代码: @RequestMapping("/user") public class UserController { /** * Returns user by id. * * @param user IMEI * @return */ @RequestMapping(value = "/{imei}",method = RequestMethod.GET) public User getUser(@PathVariable String imei) { User myUser = null; try { myUser = DbConnector.getUserWithImei(imei); } catch (Exception e) { System.out.println("Couldn't get user from database"); e.printStackTrace(); } SseEmitter emitter = new SseEmitter(); try { emitter.send("Hallokes"); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } emitter.complete(); return myUser; } } 我看到的所有教程,控制器返回SseEmitter但我必须返回一个User.我必须使用另一个映射创建另一个控制器并侦听该URL吗?如何在现有控制器中调用该控制器方法? 在此先感谢您的帮助! 亲切的问候. 解决方法
我想你几乎就在那里,Allinone51.
您对SseEmitter.send()的调用可能应该在getUser方法中. 调整上面的示例,它可能是这样的: //... private SseEmitter emitter; @RequestMapping(value = "/{imei}",method = RequestMethod.GET) public User getUser(@PathVariable String imei) { User myUser = null; // .. do resolving of myUser (e.g. database etc). // Send message to "connected" web page: if (emitter != null) { emitter.send(myUser.toString()); // Or format otherwise,e.g. JSON. } // This return value goes back as a response to your android device // i.e. the caller of the getUser rest service. return myUser; } @RequestMapping(value = "/sse") public SseEmitter getSseEmitter() { emitter = new SseEmitter(); return emitter; } 当然,上面的代码只适用于一个连接/发射器.有更智能的存储发射器的方法.例如,在我的在线游戏应用程序中,我将发射器挂钩到每个Player对象中.这样,只要我的服务器上的玩家对象有东西告诉玩家设备,它就可以访问自己内部的正确发射器. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |