不知道要写什么了,写什么简介的最烦了
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(){
}
}