我试图创建一个通过套接字发送请求的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
?
答案 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);
}
}