我正在创建一个端点,它将接收日期以在服务器端进行一些过滤.代码如下所示:
@RequestMapping(
value = "/test",
method = RequestMethod.GET,
produces = {MediaType.APPLICATION_JSON_VALUE, MediaType.APPLICATION_XML_VALUE}
)
@ResponseStatus(HttpStatus.OK)
public TestSummaryModel getTestSummaryByDate(
@RequestParam ZonedDateTime start,
@RequestParam ZonedDateTime end) {
return testService.getTestBetween(start, end);
}
Run Code Online (Sandbox Code Playgroud)
当我尝试调用我的端点时,我收到HTTP 400错误"客户端发送的请求在语法上是不正确的."
我尝试了不同的日期格式,但没有一个有效.我错过了什么吗?我读到了@DateTimeFormat,但即使我添加了它,也没有用.
@RequestParam @DateTimeFormat(pattern = "dd-MM-yyyy") ZonedDateTime start
Run Code Online (Sandbox Code Playgroud)
这是我正在做的请求的一个例子:
HTTP://主机/测试的API/V1 /测试总结/试验开始= 2015年9月9日和结束= 2015年9月9日
谢谢!
我正在尝试创建一个通道拦截器,它将一些数据添加到消息的标题中,并可能检查 MDC(映射诊断上下文)中是否有信息,尽管第二部分是我还没有开始弄清楚的。
对于第一部分,我正在阅读 spring 集成的文档并说:
请记住,receive() 调用仅与 PollableChannels 相关。事实上, SubscribableChannel 接口甚至没有定义 receive() 方法。这样做的原因是当消息被发送到 SubscribableChannel 时,它将根据频道的类型直接发送给一个或多个订阅者(例如 PublishSubscribeChannel 发送给它的所有订阅者)。因此,preReceive(..) 和 postReceive(..) 拦截器方法仅在拦截器应用于 PollableChannel 时调用。
看到拦截器需要实现的接口:
public interface ChannelInterceptor {
Message<?> preSend(Message<?> message, MessageChannel channel);
void postSend(Message<?> message, MessageChannel channel, boolean sent);
void afterSendCompletion(Message<?> message, MessageChannel channel, boolean sent, Exception ex);
boolean preReceive(MessageChannel channel);
Message<?> postReceive(Message<?> message, MessageChannel channel);
void afterReceiveCompletion(Message<?> message, MessageChannel channel, Exception ex);
}
Run Code Online (Sandbox Code Playgroud)
我想知道所有这些方法中的哪一个是我应该拦截消息的更安全的地方?由于其中一些无法执行,具体取决于 Channel 类型。例如,像 SubscribableChannel 一样,它不会执行接收,所以我假设 preReceive 和 postReceive 永远不会被调用。
基于此,我可以假设 preSend 是一个更安全的地方吗?