@MessageMapping с плагином Grails spring-websocket
Я новичок в Grails и работаю над тем, чтобы заставить WebSockets работать в приложении. Я получил большую часть его работы, за исключением того, что я не мог понять, как передать параметры в методы, аннотированные @MessageMapping.
Это работает:
class MyController{
@MessageMapping(value="/start")
protected void startProcess(){ }
}
Что мне нужно что-то подобное для работы:
@MessageMapping(value="/start/{file}")
protected void startProcess(){
String file = params.file
//do somethig with the file...
}
Но это не работает. Я попытался изменить UrlMappings.groovy, @PathVariable. Я почти уверен, что упускаю что-то простое. Есть указатели?
1 ответ
Решение
Чтобы получить что-то от пути, используйте @DestinationVariable
(см. 20.4.4 Обработка сообщений аннотации в весенней документации на websocket).
Вот рабочий фрагмент (Grails 2.4.3, на примере плагина):
// Domain Class
class Foo {
String name
String desc
}
// controller method
@MessageMapping("/hello/{file}")
@SendTo("/topic/hello")
protected String hello(@DestinationVariable String file, @Payload Foo foo) {
return "received: ${file} ${foo}"
}
// javascript
client.send("/app/hello/FILE", {}, JSON.stringify({
'name': "foo",
'desc': "a foo"
}));