[导读]HTTP 协议规定当我们新建一个用户的时候,需要返回201 Created 状态。在我们的API中,可以通过POST 方法来实现。当操作不存在的实体时,需要抛出404 错误。
HTTP 协议规定当我们新建一个用户的时候,需要返回201 Created 状态。在我们的API中,可以通过POST 方法来实现。当操作不存在的实体时,需要抛出404 错误。
Spring MVC 有一个类能够将HTTP 状态与响应实体关联,这个类叫做ResponseEntity,我们更新UserApiController 类,可以增加对错误码的处理:package masterSpringMvc.user.api;
import masterSpringMvc.user.User;
import masterSpringMvc.user.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation. * ;
import java.util.List;
@RestController@RequestMapping("/api")
public class UserApiController {
private UserRepository userRepository;@Autowired public UserApiController(UserRepository userRepository) {
this.userRepository = userRepository;
}
@RequestMapping(value = "/users", method = RequestMethod.GET)
public List findAll() {
return userRepository.findAll();
}
@RequestMapping(value = "/users", method = RequestMethod.POST)
public ResponseEntity createUser(@RequestBody User user) {
HttpStatus status = HttpStatus.OK;
if (!userRepository.exists(user.getEmail())) {
status = HttpStatus.CREATED;
}
User saved = userRepository.save(user);
return new ResponseEntity (saved, status);
}
@RequestMapping(value = "/user/{email}", method = RequestMethod.PUT)
public ResponseEntity updateUser(@PathVariable String email, @RequestBody User user) {
if (!userRepository.exists(user.getEmail())) {
return new ResponseEntity (HttpStatus.NOT_FOUND);
}
User saved = userRepository.save(email, user);
return new ResponseEntity (saved, HttpStatus.CREATED);
}
@RequestMapping(value = "/user/{email}", method = RequestMethod.DELETE)
public ResponseEntity deleteUser(@PathVariable String email) {
if (!userRepository.exists(email)) {
return new ResponseEntity (HttpStatus.NOT_FOUND);
}
userRepository.delete(email);
return new ResponseEntity (HttpStatus.OK);
}
}
可以看到我们在向RESTful 的第一等级演化,但是这里会有很多的样板式代码。