发表于: 2020-09-20 15:55:33
3 1456
今天完成的:改写成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方法了。
评论