@Controller

@Controller注解标注类的方法,return时会被视图处理器识别成静态文件的路径。默认为templates文件夹下。如return "test/hello"表示的是默认路径下的test文件夹中的名叫hello的文件,带上后缀名.html或btl等也可以识别。

@Controller和@ResponseBody的结合体

@RestController是@Controller和@ResponseBody的结合体,只能注解类,return返回的值将被转换成json,字符串除外,直接写入HTTP相应体返回到页面中。

@RequestMapping

它可以注解类也可以注解方法,注解类时标注请求的路径,标注方法时表示将特定的URL映射到指定的方法。@RequestMapping中有多个属性来进一步匹配HTTP请求到方法

1、value,请求的URL路径,支持URL模板,正则表达式。和Ant路径表达式
2、method,指定HTTP请求的方法,GET,POST,PUT,DELETE等,只有匹配才能调用,Spring提供了简化的写法

@RequestMapping(value = “/test/hello”,method = RequestMethod.GET)
@GetMapping("/test/hello")
以上两种表达的意思是一样的

3、consumes,指定HTTP请求头中的Content-Type。
例如。设置Content-Type=application/json,则对应接收ajax请求。可以在ajax中设置contentType="application/json"确保数据类型。

参数相关注解

@PathVariable

用于获取URL中的参数:一般{ }中的变量名与方法中的形参名一致(可以不加@PathVariable注解)

SpringBoot Controller 处理全部请求 springboot的controller层_spring

如果{ }中的变量名与方法中的形参名不一致,则写成下面这样

否则不单单是获取不到参数,连方法都不执行!

SpringBoot Controller 处理全部请求 springboot的controller层_spring_02

@RequestParam

1、可以对传入的参数指定参数名

// 下面的对传入参数指定为aikin,如果前端不传aa参数名,会报错
@RequestParam(value=“aikin”) String inputStr

如果客户端传到后台的值不是aikin就会报错,就是这个意思

2、可以通过required=false或者true来要求@RequestParam配置的前端参数是否一定要传

@RequestMapping("/test")
public String test(@RequestParam(required=true) String inputStr)

required=false表示不传的话,会给参数赋值为null,required=true就是必须要有

3、如果@requestParam注解的参数是int类型,并且required=false,此时如果不传参数的话,会报错

@RequestMapping(“testRequestParam”)
public String test1(@RequestParam(required=false) int inputStr)

原因是,required=false时,不传参数的话,会给参数赋值null,这样就会把null赋值给了int,因此会报错,若是前端页面不传参的话,此处就会报错。当然可以用Integer代替int

required=true这个属性用的范围广些,value指定参数值我觉得应该没必要吧

@RequestBody

就比如说,用户填写完一个表单,提交到后台来时,我们可以使用实体类区接收或者我们可以自定义一个DTO类来接收,因为可以这个表单包含的字段存在于多个实体类中。像这样使用一个类来接收前台传过来的参数,就使用@RequestBody

*@Valid *

先解释下这个,就是对前台传递过来的参数进行一个验证
使用
如果你是 springboot 项目,那么可以不用引入了,已经引入了,他就存在于最核心的 web 开发包里面

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <version>2.0.5.RELEASE</version>
</dependency>

如果你不是 springboot 项目,那么引入下面依赖即可

<dependency>
    <groupId>javax.validation</groupId>
    <artifactId>validation-api</artifactId>
    <version>1.1.0.Final</version>
</dependency>
 
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>5.4.1.Final</version>
</dependency>

做完以上工作,可以对我们的实体类进行一个优化,注意:写在字段上

@NotBlank(message = “请输入名称”)
@NotNull(message = “请输入年龄”)
— 意思就是不为空,如果前段传过来的参数为空的话,就会提示你我忘了会不会报错
@Length(message = “名称不能超过个 {max} 字符”, max = 10)
—意思就是这个字段的长度不能超过多少
@Range(message = “年龄范围为 {min} 到 {max} 之间”, min = 1, max = 100)
—就是这个字段的值范围的意思

后面遇到再加