postman是一种测试工具
用postman直接在其上输入参数名和参数值就行,不用区分post和get请求方法,当然java代码要改变一点,在响应注解的方法里面添加和postman中输入的参数名一样的形参
get请求:
代码:注意在响应注解的方法里面新添加了形参,其就对应着上面图片中的参数名
packagecom.itjh.servletmvc;importorg.springframework.stereotype.Controller;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.ResponseBody;@Controller//控制器publicclass sermvc {//请求时的访问路径@RequestMapping("/sav")//返回给浏览器的响应数据@ResponseBodypublicStringsave(String name){System.out.println("spring.......mvc.."+name);return"{'name':'zhangsan'}}";}}
测试类:
packagecom.itjh.Config.test;importcom.itjh.Config.SpringmvcConfig;importorg.springframework.web.context.WebApplicationContext;importorg.springframework.web.context.support.AnnotationConfigWebApplicationContext;importorg.springframework.web.servlet.support.AbstractDispatcherServletInitializer;publicclassSpringmvcTestextendsAbstractDispatcherServletInitializer{//加载springmvc容器@OverrideprotectedWebApplicationContextcreateServletApplicationContext(){AnnotationConfigWebApplicationContext context=newAnnotationConfigWebApplicationContext();//注册一下springmvc容器
context.register(SpringmvcConfig.class);System.out.println("加载springmvc容器");return context;}//从前端过来的请求,被拦截,即设置哪些请求归springmvc管@OverrideprotectedString[]getServletMappings(){System.out.println("拦截。。。");returnnewString[]{"/"};}//加载spring容器@OverrideprotectedWebApplicationContextcreateRootApplicationContext(){returnnull;}}
post请求:换一些地方:红圈
代码:和上面的get请求一样,不用变
总结:请求并且发送给服务器参数之后,这里的代码用封装好的request获得参数,然后再用手动创建的返回方法进行显示传进来的参数
中文乱码
post请求的解决方法:添加一个过滤器,再经过过滤器时进行手动重新编码,即解码,当然,这个只对post请求管用
测试类:添加了一个方法,看注释
packagecom.itjh.test;importcom.itjh.Config.SpringConfig;importcom.itjh.Config.SpringmvcConfig;importorg.springframework.web.filter.CharacterEncodingFilter;importorg.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;importjavax.servlet.Filter;publicclassSpringmvcTestextendsAbstractAnnotationConfigDispatcherServletInitializer{@OverrideprotectedClass<?>[]getRootConfigClasses(){returnnewClass[]{SpringConfig.class};}@OverrideprotectedClass<?>[]getServletConfigClasses(){returnnewClass[]{SpringmvcConfig.class};}@OverrideprotectedString[]getServletMappings(){returnnewString[]{"/"};}@OverrideprotectedFilter[]getServletFilters(){//创建filter过滤器CharacterEncodingFilter filter=newCharacterEncodingFilter();//将传进来的经过TomCat编码后的东西,进行重新的UTF-8的编码,也就是解码//这样返回给页面的就不是乱码了,页面是UTF-8
filter.setEncoding("UTF-8");returnnewFilter[]{filter};}}
各类型参数传递
普通参数,pojo,嵌套pojo,数组,集合
代码实现:
第一种(save1):Java中的参数
name
和请求参数
username
不一致时,就利用@RequestParam(“name”)
二:会根据Java中的参数创建其对象中的属性
三:
四:请求参数的参数名一致,值不同
五:按理会创建集合的属性,但是List是接口,自然没有属性,不像上面的pojo类,所以需要将传进来的参数转成数据,作为数据传给Java中的集合,要利用@RequestParam,他就有这个功能
packagecom.itjh.servletmvc;importcom.itjh.pojo.User;importorg.springframework.stereotype.Controller;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RequestParam;importorg.springframework.web.bind.annotation.ResponseBody;importjava.util.Arrays;importjava.util.List;@Controller//控制器publicclass sermvc {//请求时的访问路径@RequestMapping("/sav")//返回给浏览器的响应数据@ResponseBodypublicStringsave(String name){System.out.println("spring.......mvc.."+name);return"{'name':'zhangsan'}}";}@RequestMapping("/save1")@ResponseBody//请求参数作为数据与下面注解中的参数应当一致,//下面注解表示请求参数name和username关联起来//后面的age没有指定的话,应当是默认注解@。。。。。。。("age")publicStringsave1(@RequestParam("name")String username,int age){System.out.println("save....1....."+username+"的年龄"+age);return"{'name':'lisi'}";}@RequestMapping("/save2")@ResponseBody//请求参数名应当与实体类中的属性名一致publicStringsave2(User user){System.out.println("save....2....."+user.toString());return"{'name':'wangwu'}";}@RequestMapping("/save3")@ResponseBody//请求参数名应当与实体类中的属性名一致publicStringsave3(User user){System.out.println("save....3....."+user.toString());return"{'name':'liuneng'}";}@RequestMapping("/save4")@ResponseBody//数组名应当与参数请求名一致publicStringsave4(String[] name){System.out.println("save....4....."+Arrays.toString(name));return"{'name':'liuneng'}";}@RequestMapping("/save5")@ResponseBody//数组名应当与参数请求名一致publicStringsave5(@RequestParamList<String> list){System.out.println("save....5....."+list.toString());return"{'name':'liuneng'}";}}
json格式传参
都需要在方法里面的参数内加
@RequesetBody
json格式传参需要进行转换,则需要jar包:
<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.9.0</version></dependency>
完整pom.xml文件:加一个阿里云的镜像文件,免得可能下载不到jar包
<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.example</groupId><artifactId>sptingmvc</artifactId><version>1.0-SNAPSHOT</version><packaging>war</packaging><dependencies><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>4.0.1</version><scope>provided</scope></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.2.10.RELEASE</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.9.0</version></dependency></dependencies><repositories><repository><id>nexus-aliyun</id><name>nexus-aliyun</name><url>http://maven.aliyun.com/nexus/content/groups/public/</url><releases><enabled>true</enabled></releases><snapshots><enabled>false</enabled></snapshots></repository></repositories><build><plugins><!-- tomcat插件 --><plugin><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat7-maven-plugin</artifactId><version>2.2</version></plugin></plugins></build><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.source>1.7</maven.compiler.source><maven.compiler.target>1.7</maven.compiler.target></properties></project>
还需要在配置类中加入注解,这样才会开启转换json:
@EnableWebMvc
packagecom.itjh.Config;importorg.springframework.context.annotation.ComponentScan;importorg.springframework.context.annotation.Configuration;importorg.springframework.web.servlet.config.annotation.EnableWebMvc;@Configuration@ComponentScan("com.itjh.servletmvc")@EnableWebMvcpublicclassSpringmvcConfig{}
测试类:都需要加@RequesetBody,因为现在再postman中的body中传参
list底层是数组;
pojo型需要写成json格式;
list<实体类>需要数组里面加json格式;
代码:
@RequestMapping("/save6")@ResponseBody//数组名应当与参数请求名一致publicStringJsonArraySave6(@RequestBodyList<String> id){System.out.println("save....6....."+id.toString());return"{'nam':'yangjian'}";}@RequestMapping("/save7")@ResponseBody//数组名应当与参数请求名一致publicStringJsonPojoSave7(@RequestBodyUser user){System.out.println("save7方法运行"+user);System.out.println("save....7.....");return"{'nam':'yangjian'}";}@RequestMapping("/save8")@ResponseBody//数组名应当与参数请求名一致publicStringJsonPojoSave8(@RequestBodyList<User> user){System.out.println("save8方法运行"+user.toString());System.out.println("save....8.....");return"{'nam':'yangjian'}";}
postman传参主要看保存的文件
postman:
日期型参数传递
根据请求数据的日期格式设置相应参数的格式:其中的pattern后面的参数不要自己起名字,按照图片上的来呦
postman请求:
代码实现:
@RequestMapping("/save9")@ResponseBody//数组名应当与参数请求名一致publicStringJsondataSave9(Date date1,@DateTimeFormat(pattern ="yyyy-MM-dd")Date date2,@DateTimeFormat(pattern ="yyyy-MM-dd HH:mm:ss")Date date3){System.out.println("date:"+date1);System.out.println("date:"+date2);System.out.println("date:"+date3);return"{'nam':'yangjian'}";}
结果:
信息:1SpringWebApplicationInitializers detected on classpath
四月 13,20234:55:49 下午 org.apache.catalina.core.ApplicationContext log
信息:InitializingSpringDispatcherServlet 'dispatcher'
[INFO]InitializingServlet 'dispatcher'
[INFO]Completed initialization in 717 ms
四月 13,20234:55:49 下午 org.apache.coyote.AbstractProtocol start
信息:StartingProtocolHandler["http-bio-8080"]
date:SatDec1500:00:00 CST 2018
date:MonNov1600:00:00 CST 2020
date:FriDec2008:20:30 CST 2019
这个String类型传换成Date类型的底层是用了一个接口:刚才用的转换就是他的实现类做的事,他的实现类有很多,有些转化默认没有开启,就需要手动添加
@EnableWebMvc
响应数据传回
上面返回值都是String类型,返回给postman页面的都是自定义的字符数据,而现在要真正学返回值,即返回值类型
返回类型可以是pojo类,集合等等
看代码:返回值直接写就行,加了注解
@ResponseBody
和导入了jar包
jackson-databind
之后,他会自动帮你将返回值类型转换成json类型数据返回
@RequestMapping("/save10")@ResponseBodypublicUserjsonsave10(){User user=newUser();
user.setAge(12);
user.setUsername("海皮");Student student=newStudent();
student.setAddress("中国");
student.setPhone(123456);
user.setStudent(student);return user;}@RequestMapping("/save11")@ResponseBodypublicList<User>save11(){List<User> list=newArrayList<>();User user1=newUser();
user1.setAge(12);
user1.setUsername("海皮");User user2=newUser();
user2.setAge(19);
user2.setUsername("哈喽");Student student=newStudent();
student.setAddress("中国");
student.setPhone(123456);
user1.setStudent(student);
user2.setStudent(student);
list.add(user1);
list.add(user2);return list;}
返回的数据:上面这个代码的第二个方法
注解
@ResponseBody
对于数据的转换借助了一个接口(即类转换器,看下面的图)的实现类进行
版权归原作者 起鸣 所有, 如有侵权,请联系我们删除。