【问题标题】:Spring-Websocket: Send Updates to Subscribers when condition is metSpring-Websocket:满足条件时向订阅者发送更新
【发布时间】:2015-11-09 09:46:43
【问题描述】:

我在 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”的布尔字段来指示操作是否成功。

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

【问题讨论】:

    标签: java spring-mvc spring-websocket sockjs java-websocket


    【解决方案1】:

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

    @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;
    }
    

    但是,这不允许我将 operationResult 返回给客户端。

    更新:

    为了让客户端获得 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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-09-25
      • 1970-01-01
      • 1970-01-01
      • 2020-01-25
      • 1970-01-01
      • 1970-01-01
      • 2015-06-30
      相关资源
      最近更新 更多