gpt4 book ai didi

java - Spring-Websocket:满足条件时向订阅者发送更新

转载 作者:行者123 更新时间:2023-12-01 10:55:59 26 4
gpt4 key购买 nike

我在 Spring @Controller 上有以下方法:

@MessageMapping("/comment/{id}")
@SendTo("/topic/conversation/{id}")
public OperationResult<Comment> comment(Comment comment) throws Exception {

//call @Service to add comment
OperationResult<Comment> operationResult = commentService.comment(comment);

return operationResult;}

即使操作不成功(operationResult.success == false),这也会向所有订阅者发送更新。

注意:OperationResult 有一个名为“success”的 boolean 字段,用于指示操作是否成功。

问题:我想知道如何才能仅在操作成功(不引发异常)的情况下向订阅者发送更新,并确保发送评论的客户端始终获得 operationResult

最佳答案

我设法找到一种仅根据条件发送更新的方法

@Autowired
private SimpMessagingTemplate simpMessagingTemplate;

@MessageMapping("/comment/{id}" )
public OperationResult<Comment> comment(Comment comment) throws Exception {

OperationResult<Comment> operationResult = new OperationResult<>();
conversationService.comment(operationResult, comment);

if (operationResult.isSuccess()) {
simpMessagingTemplate.convertAndSend("/topic/conversation/"+operationResult.getReturnedObject().getConversation().getId(), operationResult);
}
return operationResult;
}

但这不允许我将操作结果返回给客户端。

更新:

为了允许客户端获取操作结果,我将@MessageMapping替换为@RequestMapping。因此客户端必须进行正常的 ajax 调用才能提交评论。

@Autowired
private SimpMessagingTemplate simpMessagingTemplate;

@RequestMapping("/comment" )
public OperationResult<Comment> comment(@RequestBody Comment comment) throws Exception {

OperationResult<Comment> operationResult = new OperationResult<>();
conversationService.comment(operationResult, comment);

if (operationResult.isSuccess()) {
simpMessagingTemplate.convertAndSend("/topic/conversation/"+operationResult.getReturnedObject().getConversation().getId(), operationResult);
}
return operationResult;
}

关于java - Spring-Websocket:满足条件时向订阅者发送更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33606324/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com