@MessageMapping с плагином Spring-WebSocket для Grails

Я новичок в 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. Я почти уверен, что упускаю что-то простое. Любые указатели?


person VeGo    schedule 01.08.2014    source источник


Ответы (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"
}));
person Martin Hauner    schedule 02.08.2014
comment
Спасибо. Это работает. Но я заметил странное поведение, когда иногда он перестает работать и снова начинает работать без каких-либо изменений кода. - person VeGo; 05.08.2014
comment
привет .. как насчет множественной переменной? /hello/{file}/{mycode} ?? - person ; 02.03.2017
comment
@Martin Hauner привет .. как насчет множественной переменной? /привет/{файл}/{мойкод} ?? - person ; 02.03.2017