javaのweb socketで、decoderとpathparamはある条件において不可能なようなだ。
以下の場合はダメ。
@ServerEndpoint(
value = "/ws/{p1}/{p2}/"
decoders = {HogeDecoder.class},
encoders = {HogeEncoder.class})
public class HogeWebsocket {
/**
* open hander.
*/
@OnOpen
public void onOpen(@PathParam("p1") String p1, Session session, EndpointConfig config) {
:
:
}
}
これだと、p1がdecoderの対象になるみたい。
そのため、次のような方法で対処する。
@ServerEndpoint(
value = "/ws/{p1}/{p2}/"
decoders = {HogeDecoder.class},
encoders = {HogeEncoder.class})
public class HogeWebsocket {
/**
* open hander.
*/
@OnOpen
public void onOpen(Session session, EndpointConfig config) {
Map<String, String> pathParameters = session.getPathParameters();
String p1 = pathParameters.get("p1");
:
}
}
本件は、decoderでバイナリからテキストに変換しようとした際に起きた現象。
なので、decoderが何をするかによるとは思うが。。
javaのページを見たが、それらしき記述はなかった。。
コメントがあればどうぞ