我如何发送休息请求到套接字

时间:2018-12-15 12:53:47

标签: java spring rest websocket

我试图创建一个通过套接字发送请求的API。

代码:

@Controller
public class GreetingController {
    @GetMapping("/x")
    public void send() {
        greeting(new HelloMessage("Admin", "bla"));
    }
    @MessageMapping("/hello")
    @SendTo("/topic/greetings")
    public Greeting greeting(HelloMessage message) {
        return new Greeting(HtmlUtils.htmlEscape(message.getName() + ": " + message.getMsg()));
    }
}

我不知道如何通过休息将请求发送到websocket。 谁能解释为什么我向/x发送请求时Websocket无法得到new HelloMessage

1 个答案:

答案 0 :(得分:1)

当您从同一类中调用另一个方法时,您只需执行以下操作:调用一个方法。此方法调用并不关心被调用的方法是否具有注释。

greeting()方法仅在从Websocket客户端调用消息时才发送消息,并将消息发布到/hello

要以编程方式发送消息,请使用SimpMessageTemplate as documented

  

如果要从应用程序的任何部分向连接的客户端发送消息怎么办?任何应用程序组件都可以将消息发送到brokerChannel。最简单的方法是注入SimpMessagingTemplate并使用它发送消息。通常,您将按类型注入它,如以下示例所示:

@Controller
public class GreetingController {

    private SimpMessagingTemplate template;

    @Autowired
    public GreetingController(SimpMessagingTemplate template) {
        this.template = template;
    }

    @RequestMapping(path="/greetings", method=POST)
    public void greet(String greeting) {
        String text = "[" + getTimestamp() + "]:" + greeting;
        this.template.convertAndSend("/topic/greetings", text);
    }

}