SpringMVC Controller书写

本文最后更新于:2022年7月29日 下午

不知道要写什么了,写什么简介的最烦了

Spring MVC Controller书写

Spring MVC是一个MVCWEB框架,它建立在一个中央前端控制器Servlet(DispatcherServlter),它负责发送每一个请求到合适的处理程序,使用视图或者其他方式来返回响应结果。SpringMVCSpring产品组合的一部分,它享有Spring Ioc容器来紧密结合Spring松耦合等特点。

SpringMVC架构图

如何确定一个Controller

步骤

  1. 确定请求的请求方法,如果可以请遵从RESTful规范
  2. 确定请求的URLurl可以随意命名,但是尽量可以一眼就能看到表达的意思
  3. 确定请求参数传参的方式,一般在请求体、路径、QueryString,一般来说请求体的参数类型会比较丰富
  4. 确定请求参数,这里一般包括字段、字段类型、是否必传、备注构成

示例

我需要获取一个用户的信息

  1. 请求方法:GET
  2. url:/user/{user_id}
  3. 请求参数传参的方式:路径
  4. 请求参数
字段类型是否必传备注
user_idint用户ID

如何书写一个Controller

步骤

  1. 新建一个Controller,实际上就是新建一个类,并给它加上ControllerRestController注解

    新建一个类,给类加上Controller注解,这个注解会使Spring加载这个类为一个Bean,也可以使用RestController来表示这个Controller是一个符合RESTful规范的Controller

    @RestController@Controller的区别

    @RestController注解等价于@ResponseBody@Controller@RestController@Controller的共同点是都用来表示Spring某个类是否可以接收HTTP请求,二者区别: @RestController无法返回指定页面,而@Controller可以;前者可以直接返回数据,后者需要@ResponseBody辅助

    File:org.springframework.web.bind.annotation.RestController

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    @Target({ElementType.TYPE})
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    @Controller
    @ResponseBody
    public @interface RestController {
    @AliasFor(
    annotation = Controller.class
    )
    String value() default "";
    }
  2. 书写具体的方法

    1. 书写注解,需要接受HTTP请求的方法需要加入@RequestMapping注解
      1. 确定请求方法,在@RequestMapping注解中的method中确定,不书写则默认为GET请求
      2. 确定URL以及其它一些东西,URLvalue确定,如果只有一个字段的话可以不用熟悉value
    2. 确定返回值
      1. 如果返回值为JSON类型,则应该返回一个对象,并且要加上@ResponseBody注解
      2. 如果返回的是一个页面,则需要配置视图解析器,并返回值为String
    3. 确定参数
      1. 如果参数在Path中,则URL中应该由{}来确定参数位置,使用@PathVariable确定绑定到何处
      2. 如果参数在请求体中,可以使用@RequestBody解析到对象中
      3. 如果参数在QueryString中,可以使用@RequestParam绑定到何处

示例

我需要获取一个用户的信息

  1. 新建一个Controller
1
2
3
4
@RestController
public class UserController {

}
  1. 确定方法,为GET,这里
1
2
3
4
5
6
7
@RestController
public class UserController {

@RequestMapping(method = RequestMethod.GET)
// 或者使用
@GetMapping
}
  1. 确定URL
1
2
3
4
5
6
7
@RestController
public class UserController {

@RequestMapping(method = RequestMethod.GET,value="/user/{user_id}")
// 或者使用
@GetMapping(value="/user/{user_id}")
}
  1. 确定返回值,因为我们要返回JSON,所以应该返回一个对象,如果注解不是@RestController,那么还应该在方法中加入@ResponseBody
1
2
3
4
5
6
7
8
9
10
11
12
13
14
@RestController
public class UserController {

@RequestMapping(method = RequestMethod.GET,value="/user/{user_id}")
public User getIndexByID(){

}
// 或者使用
@GetMapping(value="/user/{user_id}")
public User getIndexByID2(){

}
}

  1. 确定参数,因为使用路径作为参数,则使用@PathVariable注解
1
2
3
4
5
6
7
8
9
10
11
12
13
@RestController
public class UserController {

@RequestMapping(method = RequestMethod.GET,value="/user/{user_id}")
public User getIndexByID(@PathVariable("user_id") int userID){

}
// 或者使用
@GetMapping(value="/user/{user_id}")
public User getIndexByID2(){

}
}

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!