java– 使用SseEmitter的Spring rest服务

java– 使用SseEmitter的Spring rest服务,第1张

概述当我在服务器上调用控制器时,我正在尝试通知一个简单的html页面.我有一个Android应用程序调用我的控制器,当这完成后,我想通知我的网页控制器被调用.这是我的一些代码:@RequestMapping("/user")publicclassUserController{/***Returnsuserbyid.*

当我在服务器上调用控制器时,我正在尝试通知一个简单的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吗?如何在现有控制器中调用该控制器方法?
我的EventSource必须监听哪个URL?

在此先感谢您的帮助!

亲切的问候.

解决方法:

我想你几乎就在那里,Allinone51.

您对SseEmitter.send()的调用可能应该在getUser方法中.
一般模式是,当您创建SseEmitter时,您需要将其“存储”在某处以便其他代码获取它.您正确地从getSseEmitter方法返回SseEmitter,您只是忘记将其存储为另一种方法,以便能够在其上调用“send”.

调整上面的示例,它可能是这样的:

//...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对象中.这样,只要我的服务器上的玩家对象有东西告诉玩家设备,它就可以访问自己内部的正确发射器.

总结

以上是内存溢出为你收集整理的java – 使用SseEmitter的Spring rest服务全部内容,希望文章能够帮你解决java – 使用SseEmitter的Spring rest服务所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1113584.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存