Java最新SpringMVC 参数绑定(视图传参到控制器)_java 视图传参,java开发工程师面试问题大全及答案大全

复习的面试资料

这些面试全部出自大厂面试真题和面试合集当中,小编已经为大家整理完毕(PDF版)

  • 第一部分:Java基础-中级-高级

image

  • 第二部分:开源框架(SSM:Spring+SpringMVC+MyBatis)

image

  • 第三部分:性能调优(JVM+MySQL+Tomcat)

image

  • 第四部分:分布式(限流:ZK+Nginx;缓存:Redis+MongoDB+Memcached;通讯:MQ+kafka)

image

  • 第五部分:微服务(SpringBoot+SpringCloud+Dubbo)

image

  • 第六部分:其他:并发编程+设计模式+数据结构与算法+网络

image

进阶学习笔记pdf

  • Java架构进阶之架构筑基篇(Java基础+并发编程+JVM+MySQL+Tomcat+网络+数据结构与算法

image

  • Java架构进阶之开源框架篇(设计模式+Spring+SpringMVC+MyBatis

image

image

image

  • Java架构进阶之分布式架构篇 (限流(ZK/Nginx)+缓存(Redis/MongoDB/Memcached)+通讯(MQ/kafka)

image

image

image

  • Java架构进阶之微服务架构篇(RPC+SpringBoot+SpringCloud+Dubbo+K8s)

image

image

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

在这里插入图片描述

表单的 name 属性值内容修改如下:

<form action="../testc1/login">
    姓名:<input type="text" name="stuName">
    年龄:<input type="text" name="stuAge">
    分数:<input type="text" name="stuScore">
    <input type="submit" value="提交数据">
</form>

而 TestController1 处理器中的方法参数分别为:sName、sAge、sScore;

则在接受方法的形参前面加个 @RequestParam(“表单 name 属性值”), TestController1 类代码修改如下:

    //1、表单 name 属性值与方法参数名称不一致解决方案
    @RequestMapping("login")
    public ModelAndView login(@RequestParam("stuName") String sName, @RequestParam("stuAge")int sAge, @RequestParam("stuScore")double sScore ){
        ModelAndView mv = new ModelAndView();
        mv.setViewName("test1/show");
        mv.addObject("currentShow",sName+"年龄:"+sAge+",分数:"+sScore);
        return mv;
    }

1.2 表单 name 属性值为空时解决方案

当表单某个 name 属性值为空时,运行效果如下:

在这里插入图片描述

解决办法: 设置基本参数类型的默认值 @RequestParam(defaultValue = “xx”);修改 TestController1 类代码如下:

package cn.hh.test02.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;

@Controller
@RequestMapping("testc1")
public class TestController1 {

    @RequestMapping("login")
    public ModelAndView login(@RequestParam(defaultValue = "张三") String sName, @RequestParam(defaultValue = "20") int sAge,
                              @RequestParam(defaultValue = "88.8") double sScore ){
        ModelAndView mv = new ModelAndView();
        mv.setViewName("test1/show");
        mv.addObject("currentShow",sName+"年龄:"+sAge+",分数:"+sScore);
        return mv;
    }
}

修改后的运行效果如下:

在这里插入图片描述

2、包装数据类型(推荐使用)

使用基本类型的包装类,实现参数接收,避免使用基本类型接收参数时,将null值赋予基本类型变量抛出异常的问题。之前基本数据类型会报500错误,包装数据类型不会报错。

    @RequestMapping("login")
    public ModelAndView login(String sName, Integer sAge, Double sScore ){
        ModelAndView mv = new ModelAndView();
        mv.setViewName("test1/show");
        mv.addObject("currentShow",sName+"年龄:"+sAge+",分数:"+sScore);
        return mv;
    }

当不赋值时的运行效果如下,不会报500错误。

在这里插入图片描述

3、@RequestParam() 属性

@RequestParam()有三个属性:

  • value:指定请求参数的名称。
  • required:指定该注解所修饰的参数是否是必须的,boolean 类型。若为 true,则表示请求中所携带的参数中必须包含当前参数。若为false,则表示有没有均可。
  • defaultValue:指定当前参数的默认值。若请求 URI 中没有给出当前参数,则当前方法参数将取该默认值。即使required为true,且URI中没有给出当前参数,该处理器方法参数会自动取该默认值,而不会报错。

⛳️ 数组类型做形式参数

接收数组参数的关键点有两个:

  1. 前台表单有多个表单域的name属性相同;
  2. 控制器方法用这个name值命名的数组作为参数。

项目案例: 页面有多个兴趣爱好供选择,选择好后,控制台能显示出来。

关键步骤:

【1】在 cn.hh.test02.controller 目录下添加 TestController2 类,代码如下:

package cn.hh.test02.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller
@RequestMapping("testc2")
public class TestController2 {


    @RequestMapping("interest")
    public String interest(String[] myInterest){
        System.out.println("我的兴趣爱好有:");
        for (String s : myInterest) {
            System.out.println("interest = " + s);
        }
        return "test1/interest";
    }
}

【2】在 src/main/webapp/test1 目录下新建 interest.jsp,代码如下:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
我的兴趣爱好<br/>
<form action="../testc2/interest">
    摄影:<input type="checkbox" name="myInterest" value="摄影"/><br/>
    跳舞:<input type="checkbox" name="myInterest" value="跳舞"/><br/>
    旅游:<input type="checkbox" name="myInterest" value="旅游"/><br/>
    阅读:<input type="checkbox" name="myInterest" value="阅读"/><br/>
    <input type="submit" value="确定"/>
</form>
<br/>观测控制台的输出
</body>
</html>

【3】运行测试:

在这里插入图片描述

确定兴趣爱好,观察控制台,控制台打印如下:

在这里插入图片描述

⛳️ 实体 Bean 做形式参数

方法 Delete5(User user) 可只用一个实体类作形式参数,前提是这个实体类的各个属性要与前台表单穿过来的各个 name 属性值相同。

关键步骤:

【1】创建实体类 User 类,代码如下:

package cn.kgc.springmvc02.entity;

import lombok.Data;

@Data
public class User {
    private String uName;
    private Integer uAge;
}

【2】在 cn/kgc/springmvc02/controller 目录下,新建 ParamController 类,代码如下:

package cn.kgc.springmvc02.controller;

import cn.kgc.springmvc02.entity.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;

@Controller
@RequestMapping("param")
public class ParamController {
    @RequestMapping("delete")
    public String Delete5(User user) {
        System.out.println("user = " + user);
        return "show";
    }
}

【3】在 src/main/webapp 目录下创建 show.jsp,代码如下:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <h1>删除成功!</h1>
</body>
</html>


【4】页面展示效果

在这里插入图片描述

【5】控制台打印效果

在这里插入图片描述

⛳️ RESTful 风格编程

什么是REST风格:把请求参数变为请求路径的一种编程风格。 通过路径变量的使用,可以实现REST风格的编程。

传统的编程风格中,某项事物列表Web页面,要想一个个编辑,需要每一项中有类似这种超链接:
/restfuls?id=1
其中每一项的id不同。而采用RESTful风格后,超链接将变成:
/ restfuls/1 或者 1/restfuls 意义一样。

restful风格请求方式说明
/usersget查询全部列表数据
/users/1get根据 id 查询一条数据
/users/1delete根据 id 删除一条数据
/userspost添加数据,参数以json格式进行传递
/usersput修改数据

@PathVariable 映射 URL 绑定的占位符:

通过 @PathVariable 可以将 URL 中占位符参数绑定到控制器处理方法的入参中:URL 中的 {xxx} 占位符可以通过

@PathVariable(“xxx”) 绑定到操作方法的入参中。

一般与 @RequestMapping(“xxx”) 一起使用

项目代码:

package cn.kgc.springmvc02.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

@Controller
@RequestMapping("restfuls")
public class RestfulController {

    //1、列表查询
    @GetMapping
    public String getList(){
        System.out.println("列表数据展示");
        return "show";
    }

    //2、查询一个
    @GetMapping("{id}")
    public String getDataById(@PathVariable Integer id){
        System.out.println("查询id = " + id);
        return "show";
    }

    //3、根据 id 删除一条数据
    @DeleteMapping("{id}")
    public String deleteById(@PathVariable Integer id){
        System.out.println("删除id = " + id);
        return "show";
    }

    //4、添加数据
    @PostMapping
    public String addData(){

        return "show";
    }

    //5、修改数据
    @PutMapping("{id}")
    public String updateData(@PathVariable Integer id){
        System.out.println("修改id = " + id);
        return "show";
    }
}


运行测试:

【1】列表查询(请求地址:/restfuls;请求方式:GET)

在这里插入图片描述

控制台打印:

在这里插入图片描述

【2】查询一个(请求地址:/restfuls/1;请求方式:GET)

在这里插入图片描述

控制台打印:

在这里插入图片描述

【3】根据 id 删除一条数据(请求地址:/restfuls/1;请求方式:DELETE)

在这里插入图片描述

控制台打印:

在这里插入图片描述

【4】添加数据(请求地址:/restfuls;请求方式:POST)

总结

其他的内容都可以按照路线图里面整理出来的知识点逐一去熟悉,学习,消化,不建议你去看书学习,最好是多看一些视频,把不懂地方反复看,学习了一节视频内容第二天一定要去复习,并总结成思维导图,形成树状知识网络结构,方便日后复习。

这里还有一份很不错的《Java基础核心总结笔记》,特意跟大家分享出来

目录:

部分内容截图:

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

你去看书学习,最好是多看一些视频,把不懂地方反复看,学习了一节视频内容第二天一定要去复习,并总结成思维导图,形成树状知识网络结构,方便日后复习。

这里还有一份很不错的《Java基础核心总结笔记》,特意跟大家分享出来

目录:

[外链图片转存中…(img-lu8p6P8C-1715414429805)]

部分内容截图:

[外链图片转存中…(img-tzUvoicL-1715414429805)]

[外链图片转存中…(img-uJszZxNJ-1715414429805)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

  • 28
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值