我有一个简单的控制器(为了可读性,已经删除了一些代码,但一般的要点是我正在将上次修改的标题添加到响应中):
@GetMapping(value = "/{s}", produces = APPLICATION_JSON_VALUE)
public ResponseEntity<DetailsDto> getSaleDetails(
@RequestHeader(name = "If-Modified-Since", required = false) @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) ZonedDateTime ifModifiedSince) {
final ResponseEntity<DetailsDto> response;
response = ResponseEntity.ok()
.header("Cache-Control", "private")
.header("Last-Modified", "ekofnef") //I have tried with valid dates by the way
.body(returnThisBody());
return response;
}
我有以下测试:
@Test
void testHeader() throws Exception {
MvcResult responseFromRequest = mockMvc.perform(get(uri())
.header(CONTENT_TYPE, APPLICATION_JSON_VALUE))
.andExpect(status().isOk())
.andReturn();
assertThat(responseFromRequest.getResponse().getStatus(), is(equalTo(OK.value())));
assertThat(responseFromRequest.getResponse().getContentAsString() != null, is(equalTo(true)));
assertThat(responseFromRequest.getResponse().getHeader("Last-Modified"), is(notNullValue()));
}
测试确实调用endpoint,但在断言中失败,在断言中它检查最后修改的头是否为null。我已经调试了它,可以看到当控制器返回响应时,确实填充了头。我可以看到我的
缓存控件
和上次修改的标题已填充。但是当响应进入测试并且我调试
responseFromRequest
变量时,我只能看到缓存控制
头,而不能看到上次修改的头。。。我不知道为什么。
上次修改的
头是否有什么特别之处,我必须配置spring来促进它?
EDIT=我注意到,当日期格式化为
DateTimeFormatter时,测试通过。RFC_1123_日期_时间
standard。。为什么它不适用于DateTimeFormatter。ISO_日期_时间
?
Spring响应性。BodyBuilder
界面扩展了响应性。校长
使用其中一个设置上次修改的
标题:
response = ResponseEntity.ok()
.header("Cache-Control", "private")
.lastModified(getResourceLastModifiedDate())
.body(returnThisBody());
为什么啊?
提到的
lastModified
方法处理正确的日期时间格式。Last Modified
标题需要有效的RFC 1123时间格式,而Last Modified
方法可以为您处理此问题。
您可以通过手动为代码设置示例值来测试它:
response = ResponseEntity.ok()
.header("Last-Modified", "Sun, 21 Oct 2018 12:16:24 GMT")
.body(returnThisBody());
上面将工作,因为如果一个有效的RFC 1123时间格式的值,但是,正如我所说的,也许最好使用
lastModify
方法,因为他们已经处理了适当的格式,而没有任何更多的代码在您的身边。
我想了解一些关于Spring的东西。我正在尝试配置它,但是有些东西我不明白,因为Spring似乎不认识我的控制器。 这是我的web.xml 这就是servlet 控制器:
我只有配置和Spring Security性 登录实现UserDetailsService loginUser用于会话信息 谢谢你阅读。
如果可以从Spring返回,我很好奇 这样做可以吗?我试过了,Spring返回的不是流的值。 我应该继续返回
当我试图更改Mongoose查询返回的数据的任何部分时,它没有任何效果。 昨天我花了大约两个小时试图弄明白这一点,各种各样的s,使用临时存储变量等。最后,就在我觉得自己疯了的时候,我找到了一个解决方案。所以我想到了未来的某个人(Fyuuture!)可能存在保存问题。
我不知道该用什么。我有两页——简介。jsp(1)和booksList.jsp(2)。对于每个页面,我都创建了一个控制器类。第一页有打开第二页的按钮: 第一个问题是:我不确定这个按钮的正确性。它工作得很好,但是按下这个按钮后我有问号。 第二个问题是:当我按下该按钮时,调用带有下一个注释的方法(第二页的控制器): 我应该用这种方法返回什么?换句话说,我怎么能从第一页跳到第二页? < li> < li>
我很难理解mono 的用法。请问这个Mono 能给Mono带来什么样的好处? 谢谢。