Restful路径下编写controller层及其增删改查

前置:需要先创建好项目,并且使用mabtis根据数据表生成好代码

mybatis plus自动生成代码(代码生成器)_wa1ttinG的博客-CSDN博客

一、controller层定义

controller层就是和用户打交道,直接与前端进行交互。可调用service层,要先的到对象一般使用自动装配,因此controller层总是使用@Autowired得到一个service对象。

二、controller类简单示例

定义了一个对与教师的teacher的controller业务

@RestController
@RequestMapping("/eduservice/teacher")
public class EduTeacherController {
    @Autowired
    private EduTeacherService teacherService;

    @GetMapping("findAll")
    public List findAllTeacher() {
        List list = teacherService.list(null);
        return list;
    }
}

teacherService是由mabtis自动创建的Service层

将返回值作为json对象返回:@RestController  @ResponseBody

其源码

package org.springframework.web.bind.annotation;

import ...

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Controller
@ResponseBody
public @interface RestController {
    @AliasFor(
        annotation = Controller.class
    )
    String value() default "";
}

就是可以看到其有两个注解@Controller和@ResponseBody(注解具有继承性?),RestController是这两个的结合体,也就是@Controller:创建bean对象,@ResponseBody注解表示该方法的返回的结果(return的结果)直接转换为json数据写入 HTTP 响应正文(响应体)中,返回值就是响应结果!!

同理@RequestBody就是将请求体json转换为java数据结构(一般是类,也可以是基本数据结构)。这个类需要提前定义好,且属性名要和json对照上。

二者都是请求体json和java数据结构的互换

返回的JSON时间格式的时区也需要修改,且格式也不是我们想要的。

"2019-10-30T06:18:46.000+0000"

进行修改,在application.properties中设置

#返回json的全局时间格式
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
spring.jackson.time-zone=GMT+8

@RequestMapping

前端访问什么url 该controller进行工作,多用于Controller类上,比如

@RestController
@RequestMapping("/eduservice/teacher")
public class EduTeacherController {

那么如果前端发送请求路径是/eduservice/teacher时,由EduTeacherController接手请求,再根据细节路径和请求方式匹配Controller中函数需要注意路径前必须要加/。

RequestMapping一般命名为模块名+mysql表名(实体名),这样可以方便的知道是对哪个模块下的哪个表的操作。

三、增删改查操作实现

前置知识1:Restful路径

假设要对教师teacher进行操作

方式

url

意义

get

/teacher

获取全部员工信息

get

/teacher/{id}

获取该id的员工信息

post

/teacher

添加(一条)员工信息

put

/teacher

更新员工信息

delete

/teacher/{id}

删除员工信息

助记:

1、获取全部教师信息不需要添加id、更新和添加教师信息使用post方式传给后端一个类,也不需要额外指明id。

2、此外添加员工和更新员工由于需要在请求体中添加json信息,get,delete请求不能携带请求体,而put和delete能够携带请求体,所以添加员工和更新员工肯定是post或get请求。

HTTP请求的GET,DELETE请求能有body吗?_delete请求可以传body吗_qq_34412985的博客-CSDN博客

比如我要更新员工信息,因为要在请求体中携带员工的具体信息,因此使用请求为post或put,又因为url不需要id值(id值在请求体中),因此url没有id。

前置知识2:四种请求方式匹配

@GetMapping、@PostMapping、@DeleteMapping、@PutMapping

四种mapping通常作用于controller层中的函数上

这个路径可以不加/,随意,与所属controller的mapping拼接形成最终的访问路径。

1、查询所有数据

    @GetMapping("findAll")
    public List findAllTeacher() {
        List list = teacherService.list(null);
        return list;
    }

比如@GetMapping("findAll"),就是前端发送的Get请求、且url是"/eduservice/teacher/findAll",此时该 函数就会生效,处理该请求。

2、删除一个数据

再比如删除操作,因为RequestMapping已经设定好了模块与表名的url:"/eduservice/teacher"
此时我们只需要在url上一个员工id就好了,并且使用的是delete方法,这样就可以通过url:"/eduservice/teacher/{某个id}"来调用该删除功能。

    @DeleteMapping("{id}")
    public boolean removeTeacher(@PathVariable String id){
        boolean flag = teacherService.removeById(id);
        return flag;
    }

我们在参数中使用到了 @PathVariable 这个注解,@PathVariable String id是一种省略的写法,实际上就是@PathVariable(value="id") String id,将url的id映射到id这个变量上来。

3、添加一个数据

    @PostMapping("addTeacher")
    private R addTeacher(@RequestBody EduTeacher eduTeacher) {
        Boolean save=teacherService.save(eduTeacher);
        if (save) {
            return R.ok();
        } else {
            return R.error();
        }
    }

controller返回值

mybatis在mapper层的增删改操作的返回值都是一个int类型的result,表示最终作用的行数,查操作则返回结果值或实体对象

mybatis在server层的增删改的实现的返回值都是一个bolean类型的值,表示是否修改成功,1为成功,0为失败,查操作则返回结果值或实体对象

因此我们的controller层增删改的返回值自然要选择bolean,因为其直接与server层交互

返回值规范

Restful路径下编写controller层及其增删改查_第1张图片

你可能感兴趣的:(java,restful,spring,java)