Spring boot 工程设置上下文路径时的 Websocket 配置
2017-12-06 11:28
134 查看
项目中用的 Websocket,可以参考 Using WebSocket to build an interactive web application ,我用的是 Maven 构建的工程。教程不难,但是有几个新手需要注意的地方,特别是重构老工程,容易眼花。
第一个就是 Websocket 前后端的纽带配置,也就是继承了 AbstractWebSocketMessageBrokerConfigurer 的实现类:
再就是新建一个 Websocket 具体请求的实现类,他需要有三个注解:@RestController / @MessageMapping / @SendTo 。
* @RestController : 标记当前的类为 Websocket 请求处理类
* @MessageMapping : 类上的路径 + 方法上的路径 = 前端请求需要的路径
* @SendTo : 响应放入的消息代理地址,前端实时获取里面的信息
我在改老工程的时候,就是使用的 @RequestMapping 而不是 @MessageMapping,导致老是连不通。
由于我们使用 SpringBoot 构建的工程,我们在 application.properties 里面设置了项目名称,也就是上下文路径:
这样,前端在做 websocket 连接时,路径就需要带上这个应用名。
可以看到,整个处理类的删除题目的 @MessageMapping 路径就是 "/topic/deletion" ,这个就是前端在发删除题目的 Websocket 请求时的路径:
假如我们在 WebSocketMessageBroker 设置了 setApplicationDestinationPrefixes() 并且值为 “edc”, 则前端的删除题目请求路径为:
而 Controller 类里面的 @MessageMapping 不用做任何修改。
第一个就是 Websocket 前后端的纽带配置,也就是继承了 AbstractWebSocketMessageBrokerConfigurer 的实现类:
@Configuration @EnableWebSocketMessageBroker public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer { @Override public void configureMessageBroker(MessageBrokerRegistry config) { config.enableSimpleBroker("/topic"); // config.setApplicationDestinationPrefixes("/edc"); } @Override public void registerStompEndpoints(StompEndpointRegistry registry) { registry.addEndpoint("/websocket").setAllowedOrigins("*").withSockJS(); } }
再就是新建一个 Websocket 具体请求的实现类,他需要有三个注解:@RestController / @MessageMapping / @SendTo 。
* @RestController : 标记当前的类为 Websocket 请求处理类
* @MessageMapping : 类上的路径 + 方法上的路径 = 前端请求需要的路径
* @SendTo : 响应放入的消息代理地址,前端实时获取里面的信息
我在改老工程的时候,就是使用的 @RequestMapping 而不是 @MessageMapping,导致老是连不通。
由于我们使用 SpringBoot 构建的工程,我们在 application.properties 里面设置了项目名称,也就是上下文路径:
# 当前应用在部署后的应用名 server.contextPath=/edc
这样,前端在做 websocket 连接时,路径就需要带上这个应用名。
function connect() { var socket = new SockJS('/edc/websocket'); //1 stompClient = Stomp.over(socket);//2 stompClient.connect({}, function(frame) {//3 stompClient.subscribe('/topic/resultMsg', function(respnose){ //4 console.log("connnnnnnnected!!!!!!!!!!!!") }); }); }后端 websocket 实现类如下:
@RestController @RequestMapping("topic") @MessageMapping("topic") @Api("问卷题目的操作") public class TopicsController { private Logger logger = LoggerFactory.getLogger(TopicsController.class); @Autowired private TopicService topicService; @ApiOperation(value="删除题目") @RequestMapping(value="deletion",method=RequestMethod.POST) @MessageMapping("deletion") @SendTo("/topic/resultMsg") public BaseResponse<String> deleteTopic(Topic topic) throws Exception { logger.debug("进入删除题目 deleteTopic()"); BaseResponse resp = new BaseResponse<>(RESPONSE_STATUS.SUCCESS); topicService.deleteTopic(topic); resp.setMsg(EdcConstants.WEBSOCKET_SUCCESS); return resp; } }
可以看到,整个处理类的删除题目的 @MessageMapping 路径就是 "/topic/deletion" ,这个就是前端在发删除题目的 Websocket 请求时的路径:
function sendName() { stompClient.send("/topic/deletion", {}, JSON.stringify({ 'id': 9, 'surveyId': 1 }));//5 }
假如我们在 WebSocketMessageBroker 设置了 setApplicationDestinationPrefixes() 并且值为 “edc”, 则前端的删除题目请求路径为:
function sendName() { stompClient.send("/edc/topic/deletion", {}, JSON.stringify({ 'id': 9, 'surveyId': 1 }));//5 }
而 Controller 类里面的 @MessageMapping 不用做任何修改。
相关文章推荐
- VS2010 设置所有工程默认配置路径
- struts1配置文件例子(切记建立工程时,不要带上下文路径)
- vs2008 工程配置--路径设置
- spring boot在配置文件中设置虚拟路径
- VC6.0工程中配置EGE图形库时的设置
- Eclipse 工程使用相对路径导入Jar包设置
- c# 根据配置文件路径,设置和获取config文件 appSettings 节点值
- Cygwin GCC 的 Makefile 工程在 Eclipse CDT 中配置符号与路径自动发现方法
- web工程设置项目的默认访问路径和登录拦截
- VS工程配置属性设置
- appserv 设置虚拟路径httpd.conf的配置
- nginx(11) nginx 配置动静分离,设置默认主页,限制某个路径的资源代理全解
- java工程里CSS背景图片路径设置
- Spring boot 项目使用mvn设置配置文件动态参数
- spring boot 配置默认编码。request 设置不生效。
- java工程中配置错误日志输出的路径和文件名
- 当Android工程中提示你找不到头文件,但你已经设置头文件路径了
- javaee web.xml中如何设置配置文件的加载路径实例详解
- Tomcat通过配置一个虚拟路径管理web工程
- weblogic 部署war 和访问路径上下文设置