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

如何确定一个Controller
步骤
- 确定请求的请求方法,如果可以请遵从
RESTful规范 - 确定请求的
URL,url可以随意命名,但是尽量可以一眼就能看到表达的意思 - 确定请求参数传参的方式,一般在请求体、路径、QueryString,一般来说请求体的参数类型会比较丰富
- 确定请求参数,这里一般包括字段、字段类型、是否必传、备注构成
示例
我需要获取一个用户的信息
- 请求方法:GET
- url:
/user/{user_id} - 请求参数传参的方式:路径
- 请求参数
| 字段 | 类型 | 是否必传 | 备注 |
|---|---|---|---|
user_id | int | 是 | 用户ID |
如何书写一个Controller
步骤
新建一个
Controller,实际上就是新建一个类,并给它加上Controller、RestController注解新建一个类,给类加上
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@Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Controller @ResponseBody public @interface RestController { @AliasFor( annotation = Controller.class ) String value() default ""; }书写具体的方法
- 书写注解,需要接受
HTTP请求的方法需要加入@RequestMapping注解- 确定请求方法,在
@RequestMapping注解中的method中确定,不书写则默认为GET请求 - 确定
URL以及其它一些东西,URL由value确定,如果只有一个字段的话可以不用熟悉value
- 确定请求方法,在
- 确定返回值
- 如果返回值为
JSON类型,则应该返回一个对象,并且要加上@ResponseBody注解 - 如果返回的是一个页面,则需要配置视图解析器,并返回值为
String
- 如果返回值为
- 确定参数
- 如果参数在Path中,则
URL中应该由{}来确定参数位置,使用@PathVariable确定绑定到何处 - 如果参数在请求体中,可以使用
@RequestBody解析到对象中 - 如果参数在
QueryString中,可以使用@RequestParam绑定到何处
- 如果参数在Path中,则
- 书写注解,需要接受
示例
我需要获取一个用户的信息
- 新建一个
Controller
@RestController
public class UserController {
}- 确定方法,为GET,这里
@RestController
public class UserController {
@RequestMapping(method = RequestMethod.GET)
// 或者使用
@GetMapping
}- 确定
URL
@RestController
public class UserController {
@RequestMapping(method = RequestMethod.GET,value="/user/{user_id}")
// 或者使用
@GetMapping(value="/user/{user_id}")
}- 确定返回值,因为我们要返回
JSON,所以应该返回一个对象,如果注解不是@RestController,那么还应该在方法中加入@ResponseBody
@RestController
public class UserController {
@RequestMapping(method = RequestMethod.GET,value="/user/{user_id}")
public User getIndexByID(){
}
// 或者使用
@GetMapping(value="/user/{user_id}")
public User getIndexByID2(){
}
}
- 确定参数,因为使用路径作为参数,则使用
@PathVariable注解
@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(){
}
}
