@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"
}));
Другие вопросы по тегам