用户信息修改与删除

PUTDELETE 并不复杂,它们用于对后台数据的更新与删除。这里一起进行介绍,而不分章节。

用户信息修改

对资源更新使用的请求方法是 PUT,但 3.3 节中也有一个更新资源,请求方法为 POST。都是更新资源,PUTPOST 的区别在哪里?在 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());
}