Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

@OnMessage不支持@PathVariable String类型数据接收 #211

Open
yyrely opened this issue Oct 15, 2021 · 14 comments
Open

@OnMessage不支持@PathVariable String类型数据接收 #211

yyrely opened this issue Oct 15, 2021 · 14 comments

Comments

@yyrely
Copy link

yyrely commented Oct 15, 2021

@OnMessage方法的String参数都会被赋值成发送的信息,@PathVariable会失效

@YeautyYE
Copy link
Owner

OnMessage是用来接收websocket消息的,websocket消息不是http请求,不会有url上的参数

@yyrely
Copy link
Author

yyrely commented Oct 15, 2021

websocket消息是建立连接之后的信息传输,连接地址的信息也是可以获取到的。
我看了你的实现,OnMessage且String参数的会直接赋值为发送信息,其他类型的还是会走@PathVariable的参数获取

@XuePeng87
Copy link

@OnMessage public void onMessage(String message,@PathParam("key") String key ) {
Spring的WebScoekt可以获取链接地址里的参数,如果可以获取,会减少业务编码的复杂度

@YeautyYE
Copy link
Owner

@OnMessage public void onMessage(String message,@PathParam("key") String key ) { Spring的WebScoekt可以获取链接地址里的参数,如果可以获取,会减少业务编码的复杂度

没有太大必要性,毕竟这个是OnOpen的时候就确定的。
如果需要,自己找个地方放一下就行,框架强制存一份相对比较重,不合适

@yyrely
Copy link
Author

yyrely commented Nov 30, 2021

倒不是要框架去存一份,你写的是满足链接地址上取值的,但是这必须是其他类型不能是String。
String类型不支持因为你的实现如此,onMessage方法中的所有String字段都会赋值上msg。

@YeautyYE
Copy link
Owner

YeautyYE commented Nov 30, 2021

倒不是要框架去存一份,你写的是满足链接地址上取值的,但是这必须是其他类型不能是String。 String类型不支持因为你的实现如此,onMessage方法中的所有String字段都会赋值上msg。

连接只有在客户端发起http请求的时候才有,后面发消息的时候不存在连接,只有msg。
不存的话,不可能拿得到

@YeautyYE
Copy link
Owner

在握手完毕建立连接后,http相关请求行,请求头都应该抛弃掉,成为一个纯粹的websocket通道

@yyrely
Copy link
Author

yyrely commented Nov 30, 2021

要是纯粹是这样也没有问题,open的时候可以把信息存在session中,发送信息的时候在session中获取。
但是现在是支持其他类型,单单不支持String,所以我提了这个问题。

@YeautyYE
Copy link
Owner

要是纯粹是这样也没有问题,open的时候可以把信息存在session中,发送信息的时候在session中获取。 但是现在是支持其他类型,单单不支持String,所以我提了这个问题。

onMessage是被框架回调的,支持其他类型你如何使用呢

@yyrely
Copy link
Author

yyrely commented Nov 30, 2021

可能纯粹是这样也没有问题,打开的时候可以把信息存在会话中,发送信息的时候在会话中获取。但是现在是支持其他类型,单单不支持字符串,所以我提了这个问题。

onMessage 是被框架画面的,支持其他类型的你如何使用呢

onMessage(Session session, String message, @PathVariable Integer xxx,@PathVariable Integer xx)
这样是可以获取到路径上xxx和xx参数的ws://test/{xxx}/{xx}

@fzdwx
Copy link

fzdwx commented May 23, 2022

image
这样应该能满足你的需求

@luoziyihao
Copy link

luoziyihao commented Jun 22, 2022

放到链接后面拼装的参数里: "?a=b&c=d", 就可以通过这个对象拿到 @RequestParam MultiValueMap reqMap

@XuePeng87
Copy link

放到链接后面拼装的参数里: "?a=b&c=d", 就可以通过这个对象拿到 @RequestParam MultiValueMap reqMap

我试试

@xujimu
Copy link

xujimu commented Nov 13, 2022

我也遇到这个问题了 onClose onEvent 啥的填上 @RequestParam String uid 都是ws链接过来的key
只有onMessage上面@RequestParam String uid是客户端发来的消息 这个设计感觉不合理 很容易误解
这个问题我通过私有变量存一份也可以解决

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

6 participants