@Controller
public class MessageThreadController {
/* A plain XHR post request with a JSON body to match MessageThread. */
@RequestMapping(
headers={"Accept=application/hal+json", "Content-Type=application/json", "X-Requested-With=XMLHttpRequest"},
method={RequestMethod.POST},
produces="application/hal+json",
value="/api/unsecure/thread/create")
public HttpEntity createPost(@Valid @RequestBody MessageThread messageThread) throws Exception {
return ResponseEntity.ok("valid");
}
/* The same request above but for WebSocket.*/
@MessageMapping("/api/secure/thread/create")
@SendToUser("/api/secure/broadcast")
public HttpEntity createMessage(@Valid @RequestBody MessageThread messageThread) throws Exception {
return ResponseEntity.ok("valid");
}
}
我有一个@ControllerAdvise
来捕获可能发生的异常
:
@ControllerAdvice
public class MessageThreadControllerAdvice {
private static final Logger log = LoggerFactory.getLogger(MessageThreadControllerAdvice.class);
/* MessageThreadController.createPost() validation exception are handled here. */
@ExceptionHandler(org.springframework.web.bind.MethodArgumentNotValidException.class)
public void methodArgumentNotValidExceptionHandler(
org.springframework.web.bind.MethodArgumentNotValidException e) {
log.trace("methodArgumentNotValidExceptionHandler");
}
/* MessageThreadController.createMessage() validation exception are handled here. */
@ExceptionHandler(org.springframework.messaging.handler.annotation.support.MethodArgumentNotValidException.class)
@SendToUser("/api/secure/broadcast")
public void methodArgumentNotValidWebSocketExceptionHandler(
org.springframework.messaging.handler.annotation.support.MethodArgumentNotValidException e) {
log.trace("methodArgumentNotValidWebSocketExceptionHandler");
}
/* All exceptions are handled here. */
@ExceptionHandler
@SendToUser("/api/secure/broadcast")
public void exceptionHandler(Exception e) {
log.trace("exceptionHandler");
}
}
这里是有问题的对象:
@Getter @Setter
public class MessageThread {
@Size(min=1, message="{validation.userIds.empty}")
@NotNull(message="{validation.userIds.null}")
private Set<BigInteger> userIds;
}
如果在MessageThreadController.createPost()
和MessageThreadController.createMessage()
中发送以下JSON正文:
{"userIds":[]}
如何处理在websocket消息上引发的MethodArgumentNotValidException
?
您可以使用@MessageExceptionHandler
注释来注释@ControllerAdvise
方法。
@ControllerAdvice
public class MessageThreadControllerAdvice {
private static final Logger log = LoggerFactory.getLogger(MessageThreadControllerAdvice.class);
/* MessageThreadController.createPost() validation exception are handled here. */
@ExceptionHandler(org.springframework.web.bind.MethodArgumentNotValidException.class)
public void methodArgumentNotValidExceptionHandler(
org.springframework.web.bind.MethodArgumentNotValidException e) {
log.trace("methodArgumentNotValidExceptionHandler");
}
/* MessageThreadController.createMessage() validation exception are handled here. */
@MessageExceptionHandler(org.springframework.messaging.handler.annotation.support.MethodArgumentNotValidException.class)
@SendToUser("/api/secure/broadcast")
public void methodArgumentNotValidWebSocketExceptionHandler(
org.springframework.messaging.handler.annotation.support.MethodArgumentNotValidException e) {
log.trace("methodArgumentNotValidWebSocketExceptionHandler");
}
/* All exceptions are handled here. */
@ExceptionHandler
@SendToUser("/api/secure/broadcast")
public void exceptionHandler(Exception e) {
log.trace("exceptionHandler");
}
}
这个注释也可以应用在@controller
级别。
请注意,自Spring4.2以来,@ControllerAdvise
级别支持此注释。
我每个websocket接收几十条消息,这些消息可能只差几毫秒就能到达。我需要用操作来处理这些数据,这些操作有时会花费一些时间(例如,在DB中的插入)。为了处理接收到的新消息,必须完成对前一个消息的处理。 我的第一个想法是用Node.js Bull(用Redis)准备一个队列,但恐怕太长了,无法运行。这些消息的处理必须保持快速。 我尝试使用JS迭代器/生成器(直到现在我还从未使用过),我测试了如下
在FLTK中是通过Fl_Widegt::handle(),虚拟函数来处理系统的消息。我们可以查看Fltk的源代码来分析系统是怎样处理一些系统消息的,如按钮的消息处理 /******************************************************* Fl_Button中处理消息的代码,省略了具体的处理代码 *******************************
我正在网上阅读苹果的文档 处理本地和远程通知 在我看来,它有相互矛盾的说法。有人能澄清这些困惑吗?现在让我们严格地说一下远程通知(与本地通知相比)。 文档称,如果按下通知上的操作按钮,它将调用application:didfishlaunchingwithoptions并传递通知负载。之后,它会说,如果应用程序在前台运行,它会通过应用程序:DidReceiveMemoteNotify:发送通知。这
Storm 通过 Trident 对保证消息处理提供了不同的 level ,包括 best effort(尽力而为),at least once (至少一次)和exactly once(至少一次). 这张页面描述如何保证至少处理一次. What does it mean for a message to be "fully processed"?(一条信息被完全处理是什么意思) 一个 tuple
我是如何临时修复它的:考虑我已经实现了下面的方法 它向websocket会话发送一个TextMessage。我无法使整个方法同步,因为多个线程可以为不同的websocketSessions和消息调用它。我也不能将会话放在同步块中(尝试了但没有工作) 虽然,我这样解决了我的问题
我是Netty的新手,需要以自定义方式处理消息。我有以下接口: 现在我从客户端收到一些数据,并希望对其进行处理。我正在实现