热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

DataBind数据绑定

概念数据绑定就是将请求中的参数接收到处理器即控制器中。不同类型的数据绑定简单对象自定义对象复合对象集合对象简单的对象绑定基本类型包装类型简单对象绑定代码示例@Controller(

概念

数据绑定就是将请求中的参数接收到处理器即控制器中。

不同类型的数据绑定

  • 简单对象
  • 自定义对象
  • 复合对象
  • 集合对象

简单的对象绑定

  • 基本类型
  • 包装类型

《DataBind 数据绑定》

简单对象绑定代码示例

@Controller("simpleController")
@RequestMapping("/simple")
public class SimpleController {
//基本类型绑定
@RequestMapping("/bindBase.do")
public String bindBaseType(HttpServletRequest request){
String parameter = request.getParameter("kgc");
System.out.println("获取到的参数是"+parameter);
return "success";
}
@RequestMapping("/bindBase1.do")
public String bindBaseType1(int age){
System.out.println("获取到的年龄是"+age);
return "success";
}
@RequestMapping("/bindWrap.do")
public String bindWrap(Integer age){
System.out.println("获取到的包装类型参数"+age);
return "success";
}
}

自定义对象绑定

通过参数注入方式实现数据绑定,按属性名绑定 1.提供自定义对象

/** * 学生的数据模型 * */
public class StudentModel {
//学生ID
private int studentId;
//学生姓名
private String studentName;
@Override
public String toString() {
return "StudentModel [studentId=" + studentId + ", studentName="
+ studentName + "]";
}
//getter、setter方法省略。。。
}

2.提供处理方法

/** * 自定义对象绑定示例控制器 * */
@Controller
@RequestMapping("/custorm")
public class CustormController {
//提供绑定方法
//访问路径:http://localhost:8080/DataBind//custorm/bindCustorm.do?studentId=123&studentName=%27xiaoming%27
@RequestMapping("/bindCustorm.do")
public String bindCustorm(StudentModel student){
System.out.println(student);
return "success";
}
}

复合对象绑定

通过参数注入方式进行数据绑定

  • 请求参数与自定义对象写法略有区别
  • 提供一个复合对象,即有属性是类的对象类型的

复合对象绑定代码示例

public vlass ClassModel{
private Long classId;
private String className; //学生对象
private StudentModel studet
}

参数就变成了:student.studentId=123&student.studentName=’xxx’

/** * 班级的数据模型 * */
public class ClassModel {
//班级ID
private Integer classId;
//班级名称
private String className;
//学生对象
private StudentModel student;
@Override
public String toString() {
return "ClassModel [classId=" + classId + ", className=" + className
+ ", student=" + student + "]";
}
//getter、setter方法省略。。。

/** * 复合对象的绑定示例控制器 * @author luojin * */
@Controller
@RequestMapping("/complex")
public class ComplexController {
//绑定方法
//请求路径:http://localhost:8080/DataBind//complex/bindComplex.do?classId=123&className=%27kgc%27&student.studentId=456&student.studentName=%27zhangsan%27
@RequestMapping("/bindComplex.do")
public String bindComplex(ClassModel clazz){
System.out.println("获取到的参数:"+clazz);
return "success";
}
}

集合对象绑定

  • List集合
  • Set集合
  • Map集合
  • 数组对象绑定

集合参数绑定:提供一个数据对象来进行参数收集,否则不生效
集合对象绑定代码示例

/** * 学生的list集合模型 * */
public class StudentList {
//学生集合
private List<StudentModel> students;
@Override
public String toString() {
return "StudentList [students=" + students + "]";
}
public List<StudentModel> getStudents() {
return students;
}
public void setStudents(List<StudentModel> students) {
this.students = students;
}
}

/** * 学生set模型 * */
public class StudentSet {
private Set<StudentModel> studentSet;
public StudentSet() {
studentSet=new HashSet<StudentModel>();
studentSet.add(new StudentModel());
studentSet.add(new StudentModel());
}
@Override
public String toString() {
return "StudentSet [studentSet=" + studentSet + "]";
}
public Set<StudentModel> getStudentSet() {
return studentSet;
}
public void setStudentSet(Set<StudentModel> studentSet) {
this.studentSet = studentSet;
}
}

/** * 班级的map模型 * */
public class ClassMap {
private Map<String,ClassModel> classMap;
@Override
public String toString() {
return "ClassMap [classMap=" + classMap + "]";
}
public Map<String, ClassModel> getClassMap() {
return classMap;
}
public void setClassMap(Map<String, ClassModel> classMap) {
this.classMap = classMap;
}
}

/** * 学生的数组模型 * */
public class StudentArray {
private String[] studentIds=new String[3];
@Override
public String toString() {
return "StudentArray [studentIds=" + Arrays.toString(studentIds) + "]";
}
//getter、setter方法省略
}

/** * 集合参数绑定的示例 * */
@Controller
@RequestMapping("/collection")
public class CollectionController {
//错误的写法!
@RequestMapping("/bindError.do")
public String bindError(List<String> testList){
System.out.println(testList);
return "success";
}
//list 参数绑定
//http://localhost:8080/DataBind//collection/bindList.do?students[0].studentId=110&students[3].studentName=%27kgc%27
@RequestMapping("/bindList.do")
public String bindList(StudentList studentList){
System.out.println(studentList);
return"success";
}
//set参数绑定
//请求路径:http://localhost:8080/DataBind//collection/bindSet.do?studentSet[0].studentId=110&studentSet[1].studentName=%27kgc%27
@RequestMapping("/bindSet.do")
public String bindSet(StudentSet studentSet){
System.out.println(studentSet);
return"success";
}
//map参数绑定 classMap.get(key)
//%27相当于get请求当中的引号"" ''
//请求路径:http://localhost:8080/DataBind//collection/bindMap.do?classMap[x].classId=101&classMap[x].className=%27springMVC%27&classMap[x].student.studentId=123&classMap[x].student.studentName=%27xiaoming%27
@RequestMapping("/bindMap.do")
public String bindMap(ClassMap classMap){
System.out.println(classMap);
return"success";
}
//数组的参数绑定
//请求路径:http://localhost:8080/DataBind//collection//bindArr.do?studentIds[0]=1&studentIds[1]=2&studentIds[2]=3
//真实项目当中,一般使用:?studentIds=1,2,3,4,5,6 String split();
@RequestMapping("/bindArr.do")
public String bindArr(StudentArray students){
System.out.println(students);
return"success";
}
}

数据绑定的注解

  • @RequestParam:绑定单个请求数据(最常用)
  • @PathVariable:绑定 URL 模板变量值
  • @ModelAttribute:取 model 中存的值

@RequestParam

  • 完整形式:
    @RequestParam(value=”参数名“,required=true,defaultValue=”为空时默认值”) (value 可省略)

  • 作用:可以将请求中指定的参数名映射到方法中的参数

@PathVariable

  • 完整形式:
    @PathVariable(value=”参数名”)

  • 作用:将URL中占位符中所对应变量映射到参数 《DataBind 数据绑定》

@ModelAttribute

  • 完整形式:
    @ModelAttribute(value=”参数名”)

  • 作用:可以加在方法上,表示将方法返回值封装在Model对象当中; 可以加载方法的参数前,表示将获 取到的对象,绑定到具体的参数上; 可以配合表单标签使用,表示在请求中获取参数对象

    package cn.kgc.controllers; import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.ModelAttribute;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestParam; import cn.kgc.model.ClassModel;
    import cn.kgc.model.StudentModel; /**
     * 数据绑定注解示例控制器
     * @author luojin
     *
     */
    @Controller
    @RequestMapping(&#8220;/anotation&#8221;)
    public class AnotationController {
     
     //验证RequestParam注解
     @RequestMapping(&#8220;/checkRp.do&#8221;)
     public String checkRp(
       @RequestParam(value = &#8220;kgcName&#8221;) String kgcName) {
      System.out.println(kgcName);
      return &#8220;success&#8221;;
     }
     
     //验证RequestParam注解
     @RequestMapping(&#8220;/checkPv/{id}&#8221;)
     public String checkPv(
       @PathVariable(value=&#8221;id&#8221;) String kgcId) {
      System.out.println(kgcId);
      return &#8220;success&#8221;;
     }
     
     @ModelAttribute(&#8220;dataKey&#8221;)
     public StudentModel initData(){
      StudentModel student=new StudentModel();
      student.setStudentId(123);
      student.setStudentName(&#8220;课工场&#8221;);
      return student;
     }
     
     @RequestMapping(&#8220;/getData.do&#8221;)
     public String getModelData(@ModelAttribute(&#8220;dataKey&#8221;) StudentModel stu){
      System.out.println(&#8220;model中的参数是:&#8221;+stu);
      return &#8220;success&#8221;;
     }
     
     //请求路径:http://localhost:8080/DataBind//anotation/getFormData.do?classId=123&className=kgc
     @RequestMapping(&#8220;/getFormData.do&#8221;)
     public String getFormData(@ModelAttribute(&#8220;class&#8221;) ClassModel clazz){
      System.out.println(&#8220;获取的表单对象:&#8221;+clazz);
      return &#8220;success&#8221;;
     } }


推荐阅读
  • ButterKnife 是一款用于 Android 开发的注解库,主要用于简化视图和事件绑定。本文详细介绍了 ButterKnife 的基础用法,包括如何通过注解实现字段和方法的绑定,以及在实际项目中的应用示例。此外,文章还提到了截至 2016 年 4 月 29 日,ButterKnife 的最新版本为 8.0.1,为开发者提供了最新的功能和性能优化。 ... [详细]
  • Java Socket 关键参数详解与优化建议
    Java Socket 的 API 虽然被广泛使用,但其关键参数的用途却鲜为人知。本文详细解析了 Java Socket 中的重要参数,如 backlog 参数,它用于控制服务器等待连接请求的队列长度。此外,还探讨了其他参数如 SO_TIMEOUT、SO_REUSEADDR 等的配置方法及其对性能的影响,并提供了优化建议,帮助开发者提升网络通信的稳定性和效率。 ... [详细]
  • 在前文探讨了Spring如何为特定的bean选择合适的通知器后,本文将进一步深入分析Spring AOP框架中代理对象的生成机制。具体而言,我们将详细解析如何通过代理技术将通知器(Advisor)中包含的通知(Advice)应用到目标bean上,以实现切面编程的核心功能。 ... [详细]
  • 本文深入探讨了在Spring Boot中处理RESTful风格的表单请求的方法,包括请求参数处理、请求映射以及RESTful设计原则的应用。文章详细介绍了如何利用HTTP动词(如GET、POST、PUT、DELETE)来操作资源,并结合Spring Boot的注解(如@GetMapping、@PostMapping等)实现高效、清晰的请求处理逻辑。通过实例分析,展示了如何在实际项目中应用这些技术,提高开发效率和代码可维护性。 ... [详细]
  • 在数据库事务处理中,InnoDB 存储引擎提供了多种隔离级别,其中 READ COMMITTED 和 REPEATABLE READ 是两个常用的选项。本文详细对比了这两种隔离级别的特点和差异,不仅从理论角度分析了它们对“脏读”和“幻读”的处理方式,还结合实际应用场景探讨了它们在并发控制和性能表现上的不同。特别关注了行锁机制在不同隔离级别下的行为,为开发者选择合适的隔离级别提供了参考。 ... [详细]
  • 在基于.NET框架的分层架构实践中,为了实现各层之间的松散耦合,本文详细探讨了依赖注入(DI)和控制反转(IoC)容器的设计与实现。通过合理的依赖管理和对象创建,确保了各层之间的单向调用关系,从而提高了系统的可维护性和扩展性。此外,文章还介绍了几种常见的IoC容器实现方式及其应用场景,为开发者提供了实用的参考。 ... [详细]
  • 为了确保iOS应用能够安全地访问网站数据,本文介绍了如何在Nginx服务器上轻松配置CertBot以实现SSL证书的自动化管理。通过这一过程,可以确保应用始终使用HTTPS协议,从而提升数据传输的安全性和可靠性。文章详细阐述了配置步骤和常见问题的解决方法,帮助读者快速上手并成功部署SSL证书。 ... [详细]
  • 在配置Nginx的SSL证书后,虽然HTTPS访问能够正常工作,但HTTP请求却会遇到400错误。本文详细解析了这一问题,并提供了Nginx配置的具体示例。此外,还深入探讨了DNS服务器证书、SSL证书的申请与安装流程,以及域名注册、查询方法和CDN加速技术的应用,帮助读者全面了解相关技术细节。 ... [详细]
  • Spring框架中枚举参数的正确使用方法与技巧
    本文详细阐述了在Spring Boot框架中正确使用枚举参数的方法与技巧,旨在帮助开发者更高效地掌握和应用枚举类型的数据传递,适合对Spring Boot感兴趣的读者深入学习。 ... [详细]
  • 本文介绍了如何利用Struts1框架构建一个简易的四则运算计算器。通过采用DispatchAction来处理不同类型的计算请求,并使用动态Form来优化开发流程,确保代码的简洁性和可维护性。同时,系统提供了用户友好的错误提示,以增强用户体验。 ... [详细]
  • 在List和Set集合中存储Object类型的数据元素 ... [详细]
  • 本文深入解析了WCF Binding模型中的绑定元素,详细介绍了信道、信道管理器、信道监听器和信道工厂的概念与作用。从对象创建的角度来看,信道管理器负责信道的生成。具体而言,客户端的信道通过信道工厂进行实例化,而服务端则通过信道监听器来接收请求。文章还探讨了这些组件之间的交互机制及其在WCF通信中的重要性。 ... [详细]
  • 优化后的标题:深入探讨网关安全:将微服务升级为OAuth2资源服务器的最佳实践
    本文深入探讨了如何将微服务升级为OAuth2资源服务器,以订单服务为例,详细介绍了在POM文件中添加 `spring-cloud-starter-oauth2` 依赖,并配置Spring Security以实现对微服务的保护。通过这一过程,不仅增强了系统的安全性,还提高了资源访问的可控性和灵活性。文章还讨论了最佳实践,包括如何配置OAuth2客户端和资源服务器,以及如何处理常见的安全问题和错误。 ... [详细]
  • 在 Axublog 1.1.0 版本的 `c_login.php` 文件中发现了一个严重的 SQL 注入漏洞。该漏洞允许攻击者通过操纵登录请求中的参数,注入恶意 SQL 代码,从而可能获取敏感信息或对数据库进行未授权操作。建议用户尽快更新到最新版本并采取相应的安全措施以防止潜在的风险。 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
author-avatar
rukal2502900501_324
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有