ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java – 使用SseEmitter的Spring rest服务

2019-07-27 17:20:17  阅读:415  来源: 互联网

标签:server-sent-events android java spring rest


当我在服务器上调用控制器时,我正在尝试通知一个简单的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对象中.这样,只要我的服务器上的玩家对象有东西告诉玩家设备,它就可以访问自己内部的正确发射器.

标签:server-sent-events,android,java,spring,rest
来源: https://codeday.me/bug/20190727/1555947.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有