Java 向spring boot websocket中的特定用户发送响应

Java 向spring boot websocket中的特定用户发送响应,java,spring-boot,websocket,Java,Spring Boot,Websocket,有一个服务器端任务表,客户端用户订阅以获取所有任务的列表。我想这样做,如果某个用户创建了一个新任务,那么所有其他用户都会被更新并看到这个,没关系。但问题是,想象一种情况,1号用户对任务应用了过滤器,例如,他当前正在查看已删除的任务。此时,2号用户创建了一个与用户筛选器1不匹配的新问题。我不应该给他看。这里我只想问你如何做得更好,我不太擅长websocket,我只知道如何在当前会话中向所有用户或特定用户发送消息。但是这种情况呢服务器端是否可以只向某些用户发送响应(可能有几个用户) 我想到的唯一选择

有一个服务器端任务表,客户端用户订阅以获取所有任务的列表。我想这样做,如果某个用户创建了一个新任务,那么所有其他用户都会被更新并看到这个,没关系。但问题是,想象一种情况,1号用户对任务应用了过滤器,例如,他当前正在查看已删除的任务。此时,2号用户创建了一个与用户筛选器1不匹配的新问题。我不应该给他看。这里我只想问你如何做得更好,我不太擅长websocket,我只知道如何在当前会话中向所有用户或特定用户发送消息。但是这种情况呢服务器端是否可以只向某些用户发送响应(可能有几个用户)

我想到的唯一选择是仍然向所有用户发送一个新任务,但是在客户端已经检查了这个任务是否适合当前的过滤器。我只是不喜欢这样的事实:在客户端,需要编写额外的逻辑,服务器发送也需要检查的数据

我有一个控制器,它创建了一个新任务,在它将任务返回给所有订阅的用户时

@MessageMapping("/createTask")
@SendTo("/task/create")
public Task create(@Payload CreateTaskDto createTaskDto) {
    return taskService.create(createTaskDto, Auth.JwtUser.getUser());
}
我可以使用SimpMessageTemplate执行convertAndSendToUser并仅将创建的任务发送给当前用户

我想让后端只将任务发送给那些当前在筛选器上有匹配项的用户

我的控制器和服务获取所有任务

@MessageMapping("/getAllTask")
@SendTo("/task/getAll")
public List<Task> getAll(@Payload(required = false) FilterGetAllTaskDto filterGetAllTaskDto) {
    if(filterGetAllTaskDto == null){
        filterGetAllTaskDto = new FilterGetAllTaskDto();
    }

    return taskService.findAll(Auth.JwtUser.getUser(), filterGetAllTaskDto);
}


public List<Task> findAll(User user, FilterGetAllTaskDto filterGetAllTaskDto) {
    log.info(SwaggerConst.Tasks.GET_ALL_TASKS);

    if(filterGetAllTaskDto.getAuthor() != null){
        return tasksRepository.findWhereUserAuthor(user);
    }

    if(filterGetAllTaskDto.getResponsible() != null){
        return tasksRepository.findWhereUserResponsible(user);
    }

    if(filterGetAllTaskDto.getObservers() != null){
        return tasksRepository.findWhereUserObserver(user);
    }

    if(filterGetAllTaskDto.getDeleted() != null){
        return tasksRepository.findDeleted();
    }

    return tasksRepository.findAllByUser(user);
}
@MessageMapping(“/getAllTask”)
@发送到(“/task/getAll”)
public List getAll(@Payload(required=false)FilterGetAllTaskDto FilterGetAllTaskDto){
if(filterGetAllTaskDto==null){
filterGetAllTaskDto=新的filterGetAllTaskDto();
}
返回taskService.findAll(Auth.JwtUser.getUser(),filterGetAllTaskDto);
}
公共列表findAll(用户用户,FilterGetAllTaskDto FilterGetAllTaskDto){
log.info(swagggerconst.Tasks.GET_ALL_Tasks);
if(filterGetAllTaskDto.getAuthor()!=null){
return tasksRepository.findWhereUserAuthor(用户);
}
if(filterGetAllTaskDto.getResponsible()!=null){
return tasksRepository.findwhere userresponsible(用户);
}
如果(filterGetAllTaskDto.GetObservators()!=null){
return tasksRepository.findWhereUserObserver(用户);
}
如果(filterGetAllTaskDto.getDeleted()!=null){
return tasksRepository.findDeleted();
}
返回tasksRepository.findallbyser(用户);
}

因此,您可以通过WebSocket向所有用户和一个用户发送消息。向某些用户发送消息的确切问题是什么?请用你的源代码详细解释你的问题。你也应该阅读和阅读。