@Controller注解标注类的方法,return时会被视图处理器识别成静态文件的路径。默认为templates文件夹下。如return "test/hello"表示的是默认路径下的test文件夹中的名叫hello的文件,带上后缀名.html或btl等也可以识别。
@RestController是@Controller和@ResponseBody的结合体,只能注解类,return返回的值将被转换成json,字符串除外,直接写入HTTP相应体返回到页面中。
它可以注解类也可以注解方法,注解类时标注请求的路径,标注方法时表示将特定的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"确保数据类型。
如果{ }中的变量名与方法中的形参名不一致,则写成下面这样
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指定参数值我觉得应该没必要吧
就比如说,用户填写完一个表单,提交到后台来时,我们可以使用实体类区接收或者我们可以自定义一个DTO类来接收,因为可以这个表单包含的字段存在于多个实体类中。像这样使用一个类来接收前台传过来的参数,就使用@RequestBody
先解释下这个,就是对前台传递过来的参数进行一个验证
使用
如果你是 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)
—就是这个字段的值范围的意思
后面遇到再加