发表于: 2020-09-20 15:55:33

3 1454


今天完成的:改写成restful风格

之前的接口写的乱七八糟的,请求方法都是写的GET。
这次改写一下。查用的GET,其他用POST。dao层和service层和之前一样,这次略过。
本来还想用PUT和DELETE,但是不顺利。
参考的官方文档:
这次的controller写在Controller2.java中
结构如下:
@Controller
@RequestMapping("/test")
public class Controller2 {
   @Autowired
   private BookServices bookService;
        ............
}
一、增
/******************* 增 ************************/
@PostMapping(value = "/books")
public String addBook(@RequestBody Book book){
   if (bookService.add(book)) {
       // 如果添加成功,就返回成功的json
       return "add";
   }
   // 失败,就返回失败的json
   return "addFail";
}
使用了注解@PostMapping和@RequestBody。好像使用了@RequestBody之后,客户端就只能用JSON传数据。用postman测试。红圈的地方要选JSON才能成功。不知道如果不用@RequestBody,是不是就能用别的传参方式。


二、查
/******************* 查全部 ************************/
@GetMapping("/books")
@ResponseBody
public String retriveBooks(){
   Gson gson = new Gson();
   List<Book> list;
   list = bookService.findAll();
   String s = gson.toJson(list);
   return s;
}
/******************* 查一个 ************************/
@GetMapping(value = "/books/{bid}")
@ResponseBody
public String retriveOne(@PathVariable String bid){
   Gson gson = new Gson();
   Book book = bookService.findOne(bid);
   String s = gson.toJson(book);
   return s;
}
使用了@ResponseBody注解,就可以直接把查到的数据转成JSON字符串返还给客户端。
使用了@PathVariable注解,查询时,直接在url中传参。
但是碰到个问题,这样不能显示中文。。。用postman测试。


三、删、更
/******************* 改 ************************/
@PostMapping(value = "/books/update")
public String updateBook(@RequestBody Book book){
   if (bookService.update(book)) {
       // 如果添加成功,就返回成功的json
       return "update";
   }
   // 失败,就返回失败的json
   return "updateFail";
}
/******************* 删 ************************/
@PostMapping(value = "/books/delete/{bid}")
public String deleteBook(@PathVariable String bid){
   // 执行删除
   if (bookService.doDel(bid)) {
       return "delete";
   }
   // 删除失败就返回失败的json
   return "deleteFail";
}
如果我能用好DELETE和PUT。那么CRUD的接口形式能统一成/books。
但是我不太会用,所以更改和删除的接口现在形式是/books/update和/books/delete。
实现方法和添加基本是一样的,不赘述。
postman测试通过。


明天计划的:
写部署脚本。还有剩下的内容。
遇到的问题:
还踩了一个坑,就是pojo类的构造方法不能普通的写,要用jackson包里的注解改写一下。
@Data
public class Book {
   private String bid;
   private String bname;
   private String abs;
   private String press;
   @JsonCreator
   public Book(@JsonProperty("bid") String bid,
               @JsonProperty("bname") String bname,
               @JsonProperty("abs") String abs,
               @JsonProperty("press") String press) {
           this.bid = bid;
           this.bname = bname;
           this.abs = abs;
           this.press = press;
   }
}
收获:
尝试写了SpringMVC Restful。初步会用post方法了。



返回列表 返回列表
评论

    分享到