长沙建站公司哪有,陕西最好的云营销网站建设公司,大气聚财的公司名字,做一个企业网站设计文章目录 1. 请求1.1 传递单个参数1.2 传递多个参数1.3 传递对象1.4 后端参数重命名1.5 传递数组1.6 传递集合1.7 传递JSON对象1.8 获取URL中参数1.9 上传⽂件1.10 获得Cookie1.11 获得Session1.12 获得Header 2. 响应2.1 返回静态界面2.2 返回数据2.3 返回HTML代码片段2.4 返回… 文章目录 1. 请求1.1 传递单个参数1.2 传递多个参数1.3 传递对象1.4 后端参数重命名1.5 传递数组1.6 传递集合1.7 传递JSON对象1.8 获取URL中参数1.9 上传⽂件1.10 获得Cookie1.11 获得Session1.12 获得Header 2. 响应2.1 返回静态界面2.2 返回数据2.3 返回HTML代码片段2.4 返回JSON2.5 设置状态码 1. 请求 访问不同的路径, 就是发送不同的请求。在发送请求时, 可能会带⼀些参数, 所以学习Spring的请求, 主要是学习如何传递参数到后端以及后端如何接收。 传递参数我们通过postman测试。 1.1 传递单个参数
RequestMapping(/param)
RestController
public class ParamController {RequestMapping(/m1)public String m1(String name){return name: name;}
} 正常传递 可以看到, 后端程序正确拿到了name参数的值。 Spring MVC 会根据⽅法的参数名, 找到对应的参数, 赋值给⽅法。 所以这里要注意传递的参数要和后端代码中的参数一致。 那不一致会出现什么现象呢我们直接测试如图 可以发现是获不得参数的name依旧为空。 这里还需要注意参数的类型如果不是包装类boolean参数必须传不然会报500错误类型也要一致不然会报400错误。 对于参数可能为空的数据建议使⽤包装类型。 把参数类型修改为int
RequestMapping(/param)
RestController
public class ParamController {RequestMapping(/m1)public String m1(int n){return n n;}
} 500 400 1.2 传递多个参数
RequestMapping(/param)
RestController
public class ParamController {RequestMapping(/m2)public String m2(String name, Integer age){return name: name , age: age;}
} 正常传递 参数要一致但是它们顺序可以调换。 要求和单个参数一样的。 但是可以发现这种还是有弊端就是当增加新的参数修改代码会非常麻烦这个时候就可以把这些参数封装成对象当增加新的参数只需要多封装个属性。 1.3 传递对象
创建Person类
package com.example.demo;public class Person {private String name;private int age;private String password;public String getName() {return name;}public void setName(String name) {this.name name;}public int getAge() {return age;}public void setAge(int age) {this.age age;}public String getPassword() {return password;}public void setPassword(String password) {this.password password;}Overridepublic String toString() {return Person{ name name \ , age age , password password \ };}
}
这个时候传递对象代码
public class ParamController {RequestMapping(/m4)public String m4(Person person){return person.toString();}
}正常传参 当传参后后端代码拿到对应的参数Spring 会根据参数名称⾃动绑定到对象的各个属性上, 如果某个属性未传递, 则赋值为null(基本类型则 赋值为默认初识值, ⽐如int类型的属性, 会被赋值为0)。 如果增加新的参数只需要修改Person中代码变得更加简单。 1.4 后端参数重命名 有时前端参数的名字我们想做出修改让它更加的方便区分这个时候就用到RequestParam 这个注解可以后端参数映射为其他名。 修改m2方法。 RequestMapping(/param)
RestController
public class ParamController {RequestMapping(/m2)public String m2(RequestParam(name) String myName, RequestParam(age) Integer myAge){return name: myName , age: myAge;}
} 相同请求不受影响 映射后要注意映射的参数会变成必传参数。 参数不传 但也可以改变查看RequestParam源码 发现required默认值为true含义就是它修饰的参数为必传那么只要修改它的返回值即可。 如下面代码这时就不是比传参数。 public String m2(RequestParam(value name,required false) String myName, RequestParam(value age, required false) Integer myAge){return name: myName , age: myAge;}1.5 传递数组
RequestMapping(/param)
RestController
public class ParamController {RequestMapping(/m5)public String m5(String[] array){return Arrays.toString(array);}
}传参 我们可以使用, 直接分割。 1.6 传递集合
RequestMapping(/param)
RestController
public class ParamController {RequestMapping(/m6)public String m6(RequestParam ListString list){return list ;}
}当用postman传参 可以正常请求但是当使用浏览器时有时要进行转义编码。 例如, 转义为%2c。 且需要使⽤ RequestParam 绑定参数关系。 默认情况下请求中参数名相同的多个值是封装到数组. 如果要封装到集合要使⽤RequestParam绑定参数关系。 1.7 传递JSON对象 RequestMapping(/m7)public String m7(RequestBody Person person){return person.toString();}接收JSON对象, 需要使⽤ RequestBody 注解。 RequestBody: 请求正⽂意思是这个注解作⽤在请求正⽂的数据绑定请求参数必须在写在请求正⽂中。 不使用注解将无法赋值。 传递参数 这时请求类型就是JOSN。 1.8 获取URL中参数 RequestMapping(/m8/{age}/{name})public String m8(PathVariable Integer age, PathVariable(name) String useName){return 解析参数: age , name: useName;}传参 PathVariable这个注解主要作⽤在请求URL路径上的数据绑定。 如果⽅法参数名称和需要绑定的URL中的变量名称⼀致时, 可以简写, 不⽤给PathVariable的属性赋值, 如上述例⼦中的id变量。 如果⽅法参数名称和需要绑定的URL中的变量名称不⼀致时, 需要PathVariable的属性value赋值,如上述例⼦中的userName变量。 1.9 上传⽂件 RequestMapping(/m9)public String m9(RequestPart(file) MultipartFile file) throws IOException {//获得文件名称String s file.getOriginalFilename();//上传到指定路径file.transferTo(new File(D:/temp/ file.getOriginalFilename()));return s;}传参 上传文件 D:\temp中 上传文件要使用RequestPart注解注解中参数要和传的参数名一致。 1.10 获得Cookie RequestMapping(/m10)public String m10(HttpServletRequest request){//获得所有CooikeCookie[] cookies request.getCookies();//打印StringBuilder stringBuilder new StringBuilder();if(cookies ! null){for (Cookie cookie: cookies) {stringBuilder.append(cookie.getName() : cookie.getValue());}}return Cookie: stringBuilder;}上面是Servlet获得Cookie的方式因为Spring MVC是基于Servlet API实现的Web框架所以HttpServletRequest , HttpServletResponse 是Servlet提供的两个类, 是Spring MVC⽅法的内置对象. 需要时直接在⽅法中添加声明即可。 响应结果并没有Cookie这是因为网站中并没有Cookie直接在postman中添加Cookie即可。 通过这个也可以看出Cookie是可以伪造的后端收到Cookie要进行校验。 上面方式也可以通过注解CookieValue 简化简化后的代码如下。 RequestMapping(/getCookie)public String getCookie(CookieValue String xiaochen){return name: xiaochen;}
}1.11 获得Session RequestMapping(/setSession)public String setSession(HttpServletRequest request){HttpSession session request.getSession();if(session ! null){session.setAttribute(name,java);}return 存储成功;}Session在服务端所以无法直接添加可以通过上述方式。 HttpSession getSession(boolean create) : 参数如果为 true, 则当不存在会话时新建会话; 参数如果为 false, 则当不存在会话时返回 null 。默认为true。 void setAttribute(String name, Object value): 使⽤指定的名称绑定⼀个对象到该 session 会话。 通过Fiddler观察Http请求和响应情况 获得Session方法和获得Cookie一样有很多种通常使用下面简单的两种。 HttpSession session request.getSession(); Session 不存在的话, 会⾃动进⾏创建。 RequestMapping(/getSession1)public String getSession(SessionAttribute(required false) String name){return name: name;}RequestMapping(/getSession2)public String getSession2(HttpSession session){String name (String) session.getAttribute(name);return name: name;}1.12 获得Header RequestMapping(/getHeader)public String getHeader(RequestHeader(User-Agent) String useragent){return useragent;}使用RequestHeader 注解即可获得。 2. 响应 在我们前⾯的代码例⼦中都已经设置了响应数据, Http响应结果可以是数据, 也可以是静态⻚⾯,也可以针对响应设置状态码, Header信息等。 2.1 返回静态界面
!DOCTYPE html
html langen
headmeta charsetUTF-8titleIndex页面/title
/head
bodyHello,Spring MVC.
/body
/html前端代码注意文件位置。 后端返回代码如何写呢先按照响应的模式写代码如下。 RequestMapping(/return)
RestController
public class ReturnController {RequestMapping(/index)public String returnIndex(){return /index.html;}
}直接返回运行查看 这很不明显不对这是返回了一个字符串。 这时就需要另一个注解了我们需要把最前面的RestController 改为 Controller。 再次请求便可以得到我们想要的结果 2.2 返回数据
RequestMapping(/return)
//RestController
Controller
ResponseBody
public class ReturnController {RequestMapping(returnData)public String returnData(){return 返回数据;}
}返回数据前面其实一直在用如果返回静态界面需要写Controller 注解如果要直接返回数据还需要加上个ResponseBody注解。注意ResponseBody 即可作用在类上表示类中所以方法返回都是数据也可以作用在方法上只表示该方法返回数据这两个注解也可以和二为一就是前面经常写的RestController但它也只能修饰类了。 2.3 返回HTML代码片段 RequestMapping(/returnHtml)ResponseBodypublic String html(){return h1hello,html/h1;}当返回数据有HTML代码浏览器会自动解析 如果用Fiffler抓包可以看到Content-Type为text/html。 响应中的 Content-Type 常⻅取值有以下⼏种: text/html : body 数据格式是 HTML。text/css : body 数据格式是 CSS。application/javascript : body 数据格式是 JavaScript。application/json : body 数据格式是 JSON。 如果请求的是js⽂件, 那么Spring MVC会⾃动设置Content-Type为 application/javascript。 如果请求的是css⽂件, 那么SpringMVC会⾃动设置Content-Type为 text/css。 2.4 返回JSON RequestMapping(/returnJosn)ResponseBodypublic HashMapString,String josn(){HashMapString,String map new HashMap();map.put(Java,Java V);map.put(Mysql,Mysql V);return map;}响应 JOSN内也是键值对可以使用map。 2.5 设置状态码 RequestMapping(/setStatus)ResponseBodypublic String setStatus(HttpServletResponse response){response.setStatus(401);return 设置状态码成功;}直接设置即可 抓包
文章转载自: http://www.morning.mnnxt.cn.gov.cn.mnnxt.cn http://www.morning.zwgrf.cn.gov.cn.zwgrf.cn http://www.morning.mcqhb.cn.gov.cn.mcqhb.cn http://www.morning.fgrkc.cn.gov.cn.fgrkc.cn http://www.morning.nfcxq.cn.gov.cn.nfcxq.cn http://www.morning.tbjtm.cn.gov.cn.tbjtm.cn http://www.morning.qpsxz.cn.gov.cn.qpsxz.cn http://www.morning.zpstm.cn.gov.cn.zpstm.cn http://www.morning.fmry.cn.gov.cn.fmry.cn http://www.morning.gzxnj.cn.gov.cn.gzxnj.cn http://www.morning.gcrlb.cn.gov.cn.gcrlb.cn http://www.morning.gcqkb.cn.gov.cn.gcqkb.cn http://www.morning.kdpal.cn.gov.cn.kdpal.cn http://www.morning.nwbnt.cn.gov.cn.nwbnt.cn http://www.morning.rqbkc.cn.gov.cn.rqbkc.cn http://www.morning.qrmry.cn.gov.cn.qrmry.cn http://www.morning.dtlnz.cn.gov.cn.dtlnz.cn http://www.morning.bnfrj.cn.gov.cn.bnfrj.cn http://www.morning.gywxq.cn.gov.cn.gywxq.cn http://www.morning.fksdd.cn.gov.cn.fksdd.cn http://www.morning.rqjl.cn.gov.cn.rqjl.cn http://www.morning.wplbs.cn.gov.cn.wplbs.cn http://www.morning.xoaz.cn.gov.cn.xoaz.cn http://www.morning.dongyinet.cn.gov.cn.dongyinet.cn http://www.morning.mnjwj.cn.gov.cn.mnjwj.cn http://www.morning.wgdnd.cn.gov.cn.wgdnd.cn http://www.morning.jhrtq.cn.gov.cn.jhrtq.cn http://www.morning.sjwws.cn.gov.cn.sjwws.cn http://www.morning.dmcxh.cn.gov.cn.dmcxh.cn http://www.morning.hengqilan.cn.gov.cn.hengqilan.cn http://www.morning.rdwm.cn.gov.cn.rdwm.cn http://www.morning.xesrd.com.gov.cn.xesrd.com http://www.morning.dwyyf.cn.gov.cn.dwyyf.cn http://www.morning.trsdm.cn.gov.cn.trsdm.cn http://www.morning.jhyfb.cn.gov.cn.jhyfb.cn http://www.morning.wzwyz.cn.gov.cn.wzwyz.cn http://www.morning.tdqhs.cn.gov.cn.tdqhs.cn http://www.morning.lkmks.cn.gov.cn.lkmks.cn http://www.morning.ydryk.cn.gov.cn.ydryk.cn http://www.morning.tkqzr.cn.gov.cn.tkqzr.cn http://www.morning.rqhdt.cn.gov.cn.rqhdt.cn http://www.morning.mbmtn.cn.gov.cn.mbmtn.cn http://www.morning.djwpd.cn.gov.cn.djwpd.cn http://www.morning.sjwzz.cn.gov.cn.sjwzz.cn http://www.morning.yrbqy.cn.gov.cn.yrbqy.cn http://www.morning.rwrn.cn.gov.cn.rwrn.cn http://www.morning.kzrbd.cn.gov.cn.kzrbd.cn http://www.morning.qpmwb.cn.gov.cn.qpmwb.cn http://www.morning.tqbyw.cn.gov.cn.tqbyw.cn http://www.morning.byrlg.cn.gov.cn.byrlg.cn http://www.morning.yydeq.cn.gov.cn.yydeq.cn http://www.morning.rstrc.cn.gov.cn.rstrc.cn http://www.morning.rjxwq.cn.gov.cn.rjxwq.cn http://www.morning.kwyq.cn.gov.cn.kwyq.cn http://www.morning.symgk.cn.gov.cn.symgk.cn http://www.morning.xbptx.cn.gov.cn.xbptx.cn http://www.morning.nldsd.cn.gov.cn.nldsd.cn http://www.morning.lbfgq.cn.gov.cn.lbfgq.cn http://www.morning.plznfnh.cn.gov.cn.plznfnh.cn http://www.morning.ljbpk.cn.gov.cn.ljbpk.cn http://www.morning.gnjtg.cn.gov.cn.gnjtg.cn http://www.morning.trkhx.cn.gov.cn.trkhx.cn http://www.morning.rkqkb.cn.gov.cn.rkqkb.cn http://www.morning.qsfys.cn.gov.cn.qsfys.cn http://www.morning.bnlkc.cn.gov.cn.bnlkc.cn http://www.morning.qqrqb.cn.gov.cn.qqrqb.cn http://www.morning.lmknf.cn.gov.cn.lmknf.cn http://www.morning.dhdzz.cn.gov.cn.dhdzz.cn http://www.morning.zlcsz.cn.gov.cn.zlcsz.cn http://www.morning.rknjx.cn.gov.cn.rknjx.cn http://www.morning.jhkzl.cn.gov.cn.jhkzl.cn http://www.morning.mjzgg.cn.gov.cn.mjzgg.cn http://www.morning.jfjbl.cn.gov.cn.jfjbl.cn http://www.morning.rwmq.cn.gov.cn.rwmq.cn http://www.morning.nwmwp.cn.gov.cn.nwmwp.cn http://www.morning.sxfmg.cn.gov.cn.sxfmg.cn http://www.morning.nrqnj.cn.gov.cn.nrqnj.cn http://www.morning.dblfl.cn.gov.cn.dblfl.cn http://www.morning.mknxd.cn.gov.cn.mknxd.cn http://www.morning.jjsxh.cn.gov.cn.jjsxh.cn