用户信息修改与删除
PUT
与 DELETE
并不复杂,它们用于对后台数据的更新与删除。这里一起进行介绍,而不分章节。
用户信息修改
对资源更新使用的请求方法是 PUT
,但 3.3 节中也有一个更新资源,请求方法为 POST
。都是更新资源,PUT
与 POST
的区别在哪里?在 HTTP
中,PUT
被定义为幂等的请求方法,POST
则不是,这是一个很重要的区别。
通俗一点说就是创建操作可以使用 POST
,也可以使用 PUT
,区别在于 POST
是作用在一个集合资源之上的(/articles
),而 PUT
操作是作用在一个具体资源之上的(/articles/123
)。如果 URL
可以在客户端确定,则使用 PUT
;如果是在服务端确定,则使用 POST
。比如很多资源使用数据库自增主键作为标识信息,而创建的资源的标识信息只能由服务端提供,这时就必须使用 POST
。
比较直观的是资源的 URL
不同,为了方便理解,我们可以看 3.3 节与 3.4 节中的测试类代码中请求链接。下面看实例,控制类代码如下所示。
@PutMapping("/user/{id}")
public User createInfo5(@Valid @RequestBody User user,BindingResult errors) {
if(errors.hasErrors()) {
errors.getAllErrors().stream().forEach(error->System.out. println("error message: "+error.getDefaultMessage()));
}
System.out.println(user.getUsername());
System.out.println(user.getPassword());
user.setUsername("Bob");
return user;
}
测试类代码如下所示。
/**
* @throws Exception
* 更新程序
*/
@Test
public void whenUpdateSuccess() throws Exception {
//JDK1.8的特性
Date date=new Date(LocalDateTime.now().plusYears(1).
atZone(ZoneId.systemDefault()).toInstant().toEpochMilli());
System.out.println(date.getTime());
String content="{\"id\":\"1\",\"username\":\"tom\",\"password\":null,\"birthday\":"+date.getTime()+"}";
String result=mockMvc.perform(MockMvcRequestBuilders.put("/user/1")
.contentType(MediaType.APPLICATION_JSON_UTF8)
.content(content))
.andExpect(MockMvcResultMatchers.status().isOk())
.andReturn().getResponse().getContentAsString();
System.out.println("result="+result);
}
用户信息删除
使用 HTTP
中的 Delete
删除一个资源。控制类代码如下所示。
@DeleteMapping("/{id:\\d+}")
public void delete(@PathVariable String id) {
System.out.println("id=" + id);
}
测试类代码如下所示。
/**
* 删除程序
* @throws Exception
*/
@Test
public void whenDeleteSuccess() throws Exception {
mockMvc.perform(MockMvcRequestBuilders.delete("/user/1")
.contentType(MediaType.APPLICATION_JSON_UTF8))
.andExpect(MockMvcResultMatchers.status().isOk());
}