我的建议从新练习一遍搭建的过程,若是感受麻烦你能够直接复制上一个工程,可是须要修改pom.xml中的一点信息java
<groupId>com.hanpang.springmvc</groupId>
<artifactId>springmvc-demo02</artifactId>
<version>0.0.1-SNAPSHOT</version>
复制代码
这章的内容简单了解就好web
能够筛选请求参数的条件来缩小请求匹配范围,好比"myParam"、"!myParam"及"myParam=myValue"等。前两个条件用于筛选存在/不存在某些请求参数的请求,第三个条件筛选具备特定参数值的请求。下面的例子展现了如何使用请求参数值的筛选条件:spring
请求参数paramsjson
package com.hanpang.web;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
@Controller//告知其是一个控制器
@RequestMapping("/book")
public class Demo04Controller {
@RequestMapping(value="/xiyouji",params="!myParam" )
public ModelAndView test01() {
System.out.println("不容许出现参数名myParam的名称");
return null;
}
@RequestMapping(value="/shuihu",params="myParam")
public ModelAndView test02() {
System.out.println("路径传递的参数必须有名字叫myParam");
return null;
}
@RequestMapping(value="/sanguo",params="myParam=shxt")
public ModelAndView test03() {
System.out.println("路径传递的参数必须有名字叫myParam,而且传递的值必须为shxt");
return null;
}
@RequestMapping(value="/honglou",params="myParam!=shxt")
public ModelAndView test04() {
System.out.println("路径传递的参数必须有名字叫myParam,而且传递的值不能是shxt");
return null;
}
}
复制代码
NOTE: 我的在实际开发中不多使用params属性,请看代码中的输出语句就是说明服务器
请求头headersmvc
package com.hanpang.web;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
@Controller//告知其是一个控制器
@RequestMapping("/book")
public class Demo04Controller {
@RequestMapping(value="/sanguo",headers="myParam=shxt")
public ModelAndView test03() {
System.out.println("headers中须要传递参数myParam,而且值必须为shxt");
return null;
}
@RequestMapping(value="/honglou",headers="myParam!=shxt")
public ModelAndView test04() {
System.out.println("headers中须要传递参数myParam,而且传递的值不能是shxt");
return null;
}
}
复制代码
这里使用PostMan进行了简单测试app
访问路径无错误,可是没有设置请求头,会报错误404测试
设置请求头能正常访问了,可是注意若是不是shxt的值,依旧会报错误404ui
能够指定一组可消费的媒体类型,缩小映射的范围。这样只有当请求头中 Content-Type 的值与指定可消费的媒体类型中有相同的时候,请求才会被匹配。好比:(官网代码)spa
@Controller
@RequestMapping(path = "/pets", consumes="application/json")
public void addPet(@RequestBody Pet pet, Model model) {
// ......
}
复制代码
在后面的课程咱们再来介绍,客户端传递数据到服务器获取,通常用于客户端传递JSON数据使用
能够指定一组生产的媒体类型,缩小映射的范围。这样只有当请求头中Accept的值与指定可生产的媒体类型中有相同的时候,请求才会被匹配。并且,使用produces条件能够确保用于生成响应的内容与指定的可生产的媒体类型是相同的。好比:(官网代码)
@Controller
@RequestMapping(path = "/pets/{petId}", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
@ResponseBody
public Pet getPet(@PathVariable String petId, Model model) {
// ......
}
复制代码
在后面咱们研究控制器返回类型,咱们再来讲明
须要注意的是经过condition
条件指定的媒体类型也能够指定字符集。好比在上面的小段代码中,仍是覆写了MappingJackson2HttpMessageConverter
类中默认配置的媒体类型,同时还指定了使用UTF-8
的字符集。
与consumes
条件相似,可生产的媒体类型表达式也可使用否认。好比,可使用!text/plain
来匹配全部请求头Accept
中不含text/plain
的请求。同时,在MediaType
类中还定义了一些常量,好比APPLICATION_JSON_VALUE
、APPLICATION_JSON_UTF8_VALUE
等,推荐更多地使用它们。
produces
属性提供的是方法级的类型支持。与其余属性不一样,当在类型级使用时,方法级的消费类型将覆盖类型级的配置,而非继承关系。