SpringMVC传递参数

一引言
SpringMvc作为越来越流行的MVC框架,市场上使用的非常多。

而我们在使用SpringMvc 时,传递参数是非常重要的,所以专门写篇文章来总结一下各种传参方式。

二传参方式2.1普通属性
①基础类型
前台: <input name=”name />
后台:
loginUser(String name)
同名原则,属性太多要写很多形参,非常麻烦.
②对象传递
前台:
<input name=”name />
< input name=”password/>
< input name=”dept.id”/>
后台:
class User{
Long id;
String name;
String password;
Dept dept;
}
add(User user) 同属性名原则
User是Domain对象,所有的属性都要和数据库字段对应,但是有的不会放到domain中,比如确认密码.
③基础类型(非domain属性)+对象传递(domain属性)
前台:
<input name=”name />
< input name=”password/>
< input name=”confirmPwd”/>
后台:
class User{
Long id;
String name;
String password;
}
add(User user,String confirmPwd )
2.2集合属性
角色--权限
①拼接字符串前台拼接字符串后台拆分字符串
前台:
<input type=”hidden” name=”ids” value=”1,2,3”/ >
后台:
saveRole(Role role,String ids){
String[] ids1 = ids.splict(“,”);
}
1:zs:18,2:ls:20,3:ww:30
② 数组
前台:
<input type=”hidden” ids=”1”/>
<input type=”hidden” ids=”2”/>
<input type=”hidden” ids=”3”/>
后台:
saveRole(Role role,Long[] ids){
}
③item[index].id
前台:
<input name=”permissions[0].id” value=”1”/>
<input name=”permissions[1].id” value=”2”/>后台:
class Role{
Long id;
String name;
List<Permission> permissions;
}
addRole(Role role)
数组方式只能是表单提交用,而拼接字符串和items[index].id支持ajax
三总结
相较于Struts2值栈传递不仅效率高,而且这种以形参方式传递也非常简单。

所以一定要好好掌握各种传递方式。

合集下载

SSM三层模型之间的参数传递

SSM三层模型之间的参数传递

SSM三层模型之间的参数传递SSM(Spring+SpringMVC+MyBatis)是一种常见的Java Web开发框架,三层模型是其常用的架构设计方式。

在SSM三层模型中,包括表示层、业务逻辑层和数据访问层。

这三层之间的参数传递是整个系统运作的关键之一,下面将详细介绍SSM三层模型之间的参数传递。

1. 表示层(Web层):表示层负责与用户进行交互,接收用户的请求,并展示结果。

在表示层(Web层)中,参数传递通常通过HTTP协议进行。

常用的参数传递方式有以下几种:2.业务逻辑层:业务逻辑层负责对业务逻辑进行处理,通常包括数据校验、数据处理、事务管理等。

参数传递在业务逻辑层内部进行,并将处理结果返回给表示层。

在业务逻辑层中,参数传递通常使用方法的参数传递。

3.数据访问层:数据访问层负责与数据库进行交互,包括数据库连接、SQL语句执行和结果处理等。

在数据访问层中,参数传递通常使用SQL语句的参数传递方式。

常用的SQL参数传递有以下几种:- 位置参数:使用"?"占位符表示,通过设置对应位置的参数值进行传递。

示例:SELECT * FROM user WHERE id = ?。

- 命名参数:使用":参数名"的形式表示,通过设置对应参数名的参数值进行传递。

示例:SELECT * FROM user WHERE name = :name。

在SSM三层模型中,不同层之间的参数传递需要进行转换和适配,下面分别介绍不同层之间的参数传递方式:1.表示层到业务逻辑层的参数传递:在表示层与业务逻辑层之间的参数传递,需要将HTTP中的请求参数转换为业务逻辑层所需要的参数,可以通过以下几种方式进行参数传递:- 直接传递:将HTTP请求参数直接传递给业务逻辑层的方法。

示例:userService.getUserByName(String name)。

- 封装为DTO(Data Transfer Object)对象:创建DTO对象,将请求参数赋值给DTO对象的属性,然后将DTO对象传递给业务逻辑层的方法。

spring MVC原理及配置

spring MVC原理及配置

spring MVC原理及配置springmvc原理及配置springmvc原理及配置1.springmvc详述:springmvc就是spring提供更多的一个强悍而有效率的web框架。

借助注释,springmvc提供更多了几乎就是pojo的研发模式,使控制器的研发和测试更加直观。

这些控制器通常不轻易处置命令,而是将其委托给spring上下文中的其他bean,通过spring的倚赖转化成功能,这些bean被转化成至控制器中。

springmvc主要由dispatcherservlet、处理器映射、处理器(控制器)、视图解析器、视图组成。

他的两个核心是两个核心:处理器映射:选择使用哪个控制器来处理请求视图解析器:选择结果应该如何渲染通过以上两点,springmvc确保了如何挑选掌控处置命令和如何挑选视图展现出输入之间的松耦合。

2.springmvc运行原理这里写图片描述(2)找寻处理器:由dispatcherservlet控制器查阅一个或多个handlermapping,找出处置命令的controller。

(3)调用处理器:dispatcherservlet将请求提交到controller。

(4)(5)调用业务处置和回到结果:controller调用业务逻辑处置后,回到modelandview。

3.springmvc接口解释(1)dispatcherservlet接口:spring提供的前端控制器,所有的请求都有经过它来统一分发。

在dispatcherservlet将请求分发给springcontroller 之前,需要借助于spring提供的handlermapping定位到具体的controller。

(2)handlermappingUSB:能够完成客户请求到controller映射。

(3)controller接口:须要为mammalian用户处置上述命令,因此同时实现controllerUSB时,必须确保线程安全并且可以器重。

springMVC中传递的参数对象中包含list的情况

springMVC中传递的参数对象中包含list的情况

springMVC中传递的参数对象中包含list的情况需要的jar包: 3.2.jar + jackson-all-1.8.5.jar。

写代码时碰到个需要将对象⾥的⼦明细⼀起传递到controller⾥去,当时就想直接将参数⼀起传递过来,贴下代码:controller:@RequestMapping(params="save")@ResponseBodypublic CustomForeignKey save(@RequestBody CustomForeignKey customForeignKey,Model model,ModelAndView mv,HttpServletRequest req){return customForeignKeyService.add(customForeignKey);}参数对象:public class CustomForeignKey {private Long id;private Long tableId;private Long foreignKeyTableId;private String foreignKeyTableName;private String name;private List<CustomForeignKeyRelation> customForeignKeyRelations;public Long getId() {return id;}对象下⼦明细:CustomForeignKeyRelation :public class CustomForeignKeyRelation {private Long id;private Long customForeignKeyId;private Long leftCustomColumnId;private String leftCustomColumnName;private String leftCustomColumnAlias;private Long rightCustomColumnId;private String rightCustomColumnName;private String rightCustomColumnAlias;public Long getId() {return id;}js传递的代码段:var relations = [];$.each(rows,function(i,obj){if(obj.leftCustomColumnId != 0 && obj.leftCustomColumnName && obj.leftCustomColumnName != '⽆')relations.push({leftCustomColumnId:obj.leftCustomColumnId,leftCustomColumnName:obj.leftCustomColumnName,rightCustomColumnId:obj.rightCustomColumnId,rightCustomColumnName:obj.rightCustomColumnName});})var dd = {tableId:selectRowOfTable.id,name:t_fk_name,foreignKeyTableId:$("#foreignKeyDialog_foreignTableId").combobox("getValue"),foreignKeyTableName:$("#foreignKeyDialog_foreignTableId").combobox("getText"),customForeignKeyRelations:relations};/*$.post("customForeignKey.htm?add",dd,function(){dgForeignKey.datagrid("reload");foreignKeyDialog.dialog("close");});*/$.ajax({url:"customForeignKey.htm?add",type:"post",dataType:"json",contentType:"application/json",data:JSON.stringify(dd),success:function(){alert("success");}});按照⽹上所说,我将 ajax的 contentType:"application/json",将json对象改成json字符,在参数前⾯加上@RequestBody,可是传递到add ⽅法⾥之后,却发现还是个空,不仅⾥⾯的list没值,连那些 long、String类型的也都没有值,后经过⼏个⼩时的研究发现,原来是配置spring 的json的类型⾥少写了“application/json;charset=UTF-8”,导致没有应⽤到json的类型转换。

springboot传参和获取参数方式

springboot传参和获取参数方式

springboot传参和获取参数方式获取和传递参数是Spring Boot程序最常见的操作之一。

下面我们详细介绍Spring Boot的传参和获取参数方式:一、传递参数1. PathVariablePathVariable可以从请求URL中获取参数,并将参数值绑定到处理器方法参数上,以@PathVariable注解指定参数名称。

2. RequestParamRequestParam可以从请求参数中获取参数,将参数值绑定到处理器方法参数上,以@RequestParam注解指定即可。

3. RequestBodyRequestBody可以从请求参数中获取参数,并将获取的参数值绑定到处理器方法参数上,以@RequestBody注解指定即可。

4. ModelAttributeModelAttribute可以从请求参数中获取参数,并将获取的参数值绑定到处理器方法参数上,以@ModelAttribute注解指定即可。

二、获取参数1. @PathVariable方式从请求URL中获取参数,以@PathVariable注解指定参数名称,以实例:@PathVariable(“name”)进行指定,即使用name变量即可接受请求URL中的name参数。

2. @RequestParam方式从请求参数中获取参数,以@RequestParam注解指定参数名称,以实例:@RequestParam(“name”)进行指定,即使用name变量即可接受请求URL中的name参数。

3. @RequestBody方式从请求参数中获取参数,以@RequestBody注解指定,即可接受请求参数中的所有内容。

4. @CookieValue方式从Cookie中获取参数,以@CookieValue注解指定需要取值的Cookie 名称,即可接受Cookie中的指定值。

以上就是Spring Boot传参和获取参数的方式。

通过以上不同的获取参数方式,可以让我们更加便捷地处理参数,快速构建完整应用。

springmvc中@RequestBody接收参数问题

springmvc中@RequestBody接收参数问题

springmvc中@RequestBody接收参数问题从前台⽤js向 springmvc中传递 json。

在controller中转换为java对象需要⽤ @RequestBody 注解。

但是传递时有⼏个问题可能会导致⽆法访问。

1.ajax中必须⽤json对象:JSON.stringify({"name":name,"age":age,"sex":sex})2.ajax中必须设置 contentType:"application/json",3.否则会报 415或者400错误。

直接上代码:前台:<html><head><title></title></head><body><div>name:<input type="text" id="name"> <br>sex:<input type="text" id="sex"><br>age:<input type="text" id="age"><br><button type="button" id="btn">提交</button></div><script src="js/jquery-3.3.1.js"></script><script>$("#btn").click(function(){var name = $("#name").val();var sex = $("#sex").val();var age = $("#age").val();$.ajax({type: "POST",url: "test03",contentType:"application/json",data: JSON.stringify({"name":name,"age":age,"sex":sex}),success: function(data){if(data.msg==1){alert("success");}else{alert("error");}}});})</script></body></html>controller@ResponseBody@RequestMapping("/test03")public Map<String,Object> test03(@RequestBody User user){Map<String,Object> map = new HashMap<>();if(user!=null){map.put("msg","1");}else{map.put("msg","0");}return map;}实体类public class User {private String name;private int age;private String sex;public User() {}public User(String name, int age, String sex) { = name;this.age = age;this.sex = sex;}public String getName() {return name;}public void setName(String name) { = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}}。

springboot重定向传递参数

springboot重定向传递参数

springboot重定向传递参数在Spring Boot中,重定向和传递参数是很常见的需求。

Spring Boot提供了多种方式来实现重定向并传递参数的功能。

一种常见的重定向和传递参数的方式是使用RedirectAttributes。

RedirectAttributes是Spring MVC提供的一种特殊的Model对象,它可以在重定向的过程中传递参数。

使用RedirectAttributes可以将参数添加到重定向的URL中,也可以将参数作为FlashAttribute传递。

首先,我们需要在处理重定向的方法中使用RedirectAttributes参数。

例如,我们有一个处理POST请求的方法,该方法在处理完请求后需要重定向到另一个页面,并传递参数:```javapublic String submitForm(Model model, RedirectAttributes redirectAttributes)//处理表单提交的数据//...//添加参数到重定向URLredirectAttributes.addAttribute("message", "成功提交表单");//重定向到另一个页面return "redirect:/result";```在上面的例子中,我们使用了addAttribute方法将参数"message"和它的值"成功提交表单"添加到重定向的URL中。

注意,这里的addAttribute方法是将参数添加到URL的查询字符串中。

```javamodel.addAttribute("message", message);return "result";```除了使用addAttribute方法将参数添加到URL的查询字符串中,我们还可以使用addFlashAttribute方法将参数作为FlashAttribute传递。

SpringMVC,SpringBoot使用ajax传递对象集合数组到后台

SpringMVC,SpringBoot使⽤ajax传递对象集合数组到后台假设有⼀个bean名叫TestPOJO。

1、使⽤ajax从前台传递⼀个对象数组/集合到后台。

前台ajax写法:var testPOJO=new Array();//这⾥组装testPOJO数组$.ajax({url:“testController/testPOJOs”,data:JSON.stringify(testPOJO),type:"post",dataType:"json",contentType:"application/json",success:function (res) {},error:function(msg){}});后台接收⽅法:@RestController@RequestMapping("testController")public class testController { @RequestMapping("/testPOJOs") //如果类的注解是@Controller,那么⽅法上⾯还需要加@ResponseBody,因为@ResTController=@Controller+@ResponseBody public String testPOJOs (@RequestBody TestPOJO [] testPOJO) {//操作 } //或者下⾯这个 //@RequestMapping("/testPOJOs") //public String testPOJOs (@RequestBody List<TestPOJO> testPOJO) {//操作 //}}⽆论是⼏维数组,前后台保持⼀致就⾏了。

2、传递Map前台ajax写法:var testMap={"a":"aaa","b":[1,2,3]};$.ajax({url:“testController/testMap”,data:JSON.stringify(testMap),type:"post",dataType:"json",contentType:"application/json",success:function (res) {},error:function(msg){}});后台接收⽅法:@RestController@RequestMapping("testController")public class testController { @RequestMapping("/testMap") public String testMap (@RequestBody Map<String,Object> map) {String a = (String) map.get("a");List<Integer> b = (List<Integer>) map.get("b");... }}3、除了传递对象集合,还需要传递其他字段。

SpringMVC中post请求参数注解@requestBody使用问题

SpringMVC中post请求参数注解@requestBody使⽤问题⼀、httpClient发送Post1public static String httpPostWithJSON(String url) throws Exception {23 HttpPost httpPost = new HttpPost(url);4 CloseableHttpClient client = HttpClients.createDefault();5 String respContent = null;67// json⽅式8 JSONObject jsonParam = new JSONObject();9 jsonParam.put("name", "admin");10 jsonParam.put("pass", "123456");11 StringEntity entity = new StringEntity(jsonParam.toString(),"utf-8");//解决中⽂乱码问题12 entity.setContentEncoding("UTF-8");13 entity.setContentType("application/json");14 httpPost.setEntity(entity);15 System.out.println();161718// 表单⽅式19// List<BasicNameValuePair> pairList = new ArrayList<BasicNameValuePair>();20// pairList.add(new BasicNameValuePair("name", "admin"));21// pairList.add(new BasicNameValuePair("pass", "123456"));22// httpPost.setEntity(new UrlEncodedFormEntity(pairList, "utf-8")); //UrlEncodedFormEntity默认"application/x-www-form-urlencoded"232425 HttpResponse resp = client.execute(httpPost);26if(resp.getStatusLine().getStatusCode() == 200) {27 HttpEntity he = resp.getEntity();28 respContent = EntityUtils.toString(he,"UTF-8");29 }30return respContent;31 }323334public static void main(String[] args) throws Exception {35 String result = httpPostWithJSON("http://localhost:8080/hcTest2/Hc");36 System.out.println(result);37 }封装表单属性可以⽤json也可以⽤传统的表单,如果是传统表单的话要注意,也就是在上边代码注释那部分。

详解SpringMVC中Controller的方法中参数的工作原理

详解SpringMVC中Controller的⽅法中参数的⼯作原理前⾔SpringMVC是⽬前主流的Web MVC框架之⼀。

SpringMVC中Controller的⽅法参数可以是Integer,Double,⾃定义对象,ServletRequest,ServletResponse,ModelAndView等等,⾮常灵活。

本⽂将分析SpringMVC是如何对这些参数进⾏处理的,使读者能够处理⾃定义的⼀些参数。

现象本⽂使⽤的demo基于maven。

我们先来看⼀看对应的现象。

@Controller@RequestMapping(value = "/test")public class TestController {@RequestMapping("/testRb")@ResponseBodypublic Employee testRb(@RequestBody Employee e) {return e;}@RequestMapping("/testCustomObj")@ResponseBodypublic Employee testCustomObj(Employee e) {return e;}@RequestMapping("/testCustomObjWithRp")@ResponseBodypublic Employee testCustomObjWithRp(@RequestParam Employee e) {return e;}@RequestMapping("/testDate")@ResponseBodypublic Date testDate(Date date) {return date;}}⾸先这是⼀个Controller,有4个⽅法。

他们对应的参数分别是带有@RequestBody的⾃定义对象、⾃定义对象、带有@RequestParam的⾃定义对象、⽇期对象。

SpringMVC框架知识点详解

SpringMVC框架知识点详解官⽅的下载⽹址是:⼀、Spring MVC简介1.1Spring MVC⼯作流程映射器:主要是根据浏览器上输⼊的url来映射所有满⾜要求的Handle(控制器类)适配器:主要是决定调⽤哪个Handler来实现具体的业务逻辑1.2Spring MVC VS Struts21)springmvc的⼊⼝是⼀个servlet,即前端控制器;struts2⼊⼝是⼀个filter过虑器,即前端过滤器,2)springmvc是基于⽅法开发(控制器类是单例的,不可能维护实体变量),传递参数是通过⽅法形参,可以设计为单例;struts2是基于类开发(维护⼀个实体变量),传递参数是通过类的属性,只能设计为多例3)springmvc通过参数解析器是将request对象内容进⾏解析成⽅法形参,将响应数据和页⾯封装成ModelAndView对象,最后⼜将模型数据通过request对象传输到页⾯;struts采⽤值栈存储请求和响应的数据,通过OGNL存取数据4)springmvc开发运⾏速度快于struts2⼆、Spring MVC⼯程搭建(xml)2.1导⼊springioc,springweb , springmvc相关的jar包2.2在/WEB-INF/ web.xml⽂件配置SpringMVC的前端控制器DispatcherServlet(前端控制器)<!-- 注册springmvc核⼼控制器 --><servlet><!-- servlet-name名字随便写 --><servlet-name>DispatcherServlet</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!-- 通知DispatcherServlet去指定的⽬录下加载springmvc.xml配置⽂件classpath:是在⼯程的src路径下寻找如果不配置init-param的话,控制器会⾃动寻找/WEB-INF/<servlet-name>-servlet.xml⽂件--><init-param><!-- 值是固定的,相当于键值对 --><param-name>contextConfigLocation</param-name><param-value>classpath:springmvc.xml</param-value></init-param></servlet><servlet-mapping><servlet-name>DispatcherServlet</servlet-name><url-pattern>*.action</url-pattern>//拦截请求</servlet-mapping>注:在默认情况下:springmvc框架的配置⽂件必须叫<servlet-name>-servlet.xml且必须放在/WEB-INF/⽬录下,我们可以在web.xml⽂件中,为DispatcherServlet配置⼀个初始化参数,让它去我们指定的⽬录下加载springmvc.xml配置⽂件2.3配置springmvc.xml注:该配置⽂件的命名规则遵循web.xml⽂件中核⼼控制器配置。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档