七【SpringMVC参数绑定】

news2024/11/24 19:27:06

目录

    • 🚩一 . 视图传参到控制器
    • 🚩二 . SpringMVC跳转方式
    • 🚩三 SpringMVC处理json请求和响应
    • 🚩四 SpringMVC静态资源处理

✅作者简介:Java-小白后端开发者 🥭公认外号:球场上的黑曼巴

🍎个人主页:不会飞的小飞侠24

🍊个人信条:谨 · 信

💞当前专栏:高级内容

🥭本文内容: SpringMVC框架

更多内容点击👇
小飞侠的博客>>>>欢迎大家!!!

在这里插入图片描述

🚩一 . 视图传参到控制器

🌴1.基本数据类型绑定

形参的名字和传递参数的名字保持一致,参数需要全部传递否则报500错误,为了解决不传参报错,可以给基本类型的参数设置默认值

 /**
     * 设置基本参数类型的默认值 @RequestParam(defaultValue = "xx")
     *如果通过url传递了参数,则以传递的为最终的参数
     * @param age
     * @param score
     */
    @RequestMapping("/login2")
    public void login2(@RequestParam(defaultValue = "20") int age , @RequestParam(defaultValue = "24.7") double score){
        System.out.println(age);
        System.out.println(score);
    }

🎄1 设置参数的别名

 public void login3(@RequestParam(defaultValue = "20" ,name = "Age") int age , double score)
 {
        System.out.println(age);
        System.out.println(score);
 }

🌴2.包装数据类型的传递

使用包装类型可以解决基本类型不传递值,出现500错误的问题但是还是要保持参数名字和形参保持一致,

 @RequestMapping("/login4")
    public void login3(Integer age , Double score){
        System.out.println(age);
        System.out.println(score);
    }

🌴3.字符串类型数据的绑定

参照包装类即可

🌴4.数组类型

 public void login3(String[] ids){
        for (int i = 0; i < ids.length; i++) {
            System.out.println(ids[i]);
        }
  }

🌴5.javaBean类型

参数名的字段和Javabean中的属性保持一致即可

 public void login3(User user){
        System.out.println(user);
    }
url:http://localhost:8080/user/login6?age=12&username=lisi&height=1.7

🌴6 返回数据到视图层

@RequestMapping(path = "/res1")
    public ModelAndView test01(){

        ModelAndView modelAndView = new ModelAndView();
        modelAndView.setViewName("hello");
        modelAndView.addObject("msg", "ModelAndView");
        return modelAndView;
    }

    @RequestMapping(path = "/res2")
    public String test02(Model model){
        model.addAttribute("msg", "model");
        return "hello";
    }

    @RequestMapping(path = "/res3")
    public String test03(ModelMap map){
        map.addAttribute("msg", "ModelMap");
        return "hello";
    }

🚩二 . SpringMVC跳转方式

Spring MVC默认采用服务器内部转发的形式展示页面信息,同时也支持重定向页面

🌴2.1 重定向(302状态码给浏览器)

@Controller
public class HelloController3 {

    @RequestMapping("/r1")
    public void test01(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
        response.sendRedirect("redirect.jsp");
    }

    @RequestMapping("/r2")
    public String test02(){
        return  "redirect:redirect.jsp";
    }

    @RequestMapping("/f1")
    public void test03(HttpServletRequest request,HttpServletResponse response) throws 	ServletException, IOException {
        request.getRequestDispatcher("redirect.jsp").forward(request, response);
    }

    @RequestMapping("/f2")
    public String test04(){
        return  "forward:redirect.jsp";
    }

    @RequestMapping("/f3")
    public String test05(){
        return  "redirect";
    }

🚩三 SpringMVC处理json请求和响应

🌴响应json格式的数据

public class JsonController {

    @GetMapping("/login/{username}/{password}")
    public void login(@PathVariable String username, @PathVariable String password, HttpServletResponse res) throws IOException {
        System.out.println(username+"::"+password);
        //响应json格式的字符串
        res.setContentType("application/json;charset=utf-8");
        JsonResult result = JsonResult.builder().code(200).count(100L).data(null).msg("ok").build();
        res.getWriter().write(result.toJSONString());
    }

    @GetMapping("/login2/{username}/{password}")
    @ResponseBody
    public Object login2(@PathVariable String username, @PathVariable String password, HttpServletResponse res) throws IOException {
        System.out.println(username+"::"+password);
        return JsonResult.builder().code(200).count(100L).data(null).msg("ok").build();
    }

    @RequestMapping("/login3")
    @ResponseBody
    public Object login3(User user) {
        System.out.println(user);
        return user;
    }

   

🌴请求数据类型为JSON

 /**
     * 接收json格式的参数
     * @param user
     * @return
     */
    @RequestMapping("/login4")
    @ResponseBody
    public Object login4(@RequestBody User user) {
        System.out.println(user);
        return user;
    }
}


前台ajax请求
<script type="text/javascript">
    $(function () {
        $("#jsbutton").click(function () {
            $.ajax({
                    url:'/login3',
                    type:'post',
                    data:{
                        username:"lisi",
                        age:20,
                        height:170,
                        birth:new Date()
                    },
                    dataType:'json',
                    success:function (result) {
                        console.log(result);
                    },
                    error:function () {
                         console.log("请求失败!")
                     }
            })
        })


        $("#jsbutton2").click(function () {
            var user = {
                username:"lisi",
                age:20,
                height:170,
                birth:'1999-9-9'
            }
            $.ajax({
                url:'/login4',
                type:'post',
                data:JSON.stringify(user),
                contentType:'application/json;charset=utf-8',
                dataType:'json',
                success:function (result) {
                    console.log(result);
                },
                error:function () {
                    console.log("请求失败!")
                }
            })
        })

    })

</script>

🌴RestFul风格

一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件。它主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制

URL定义

资源:互联网所有的事物都可以被抽象为资源
资源操作:使用POST、DELETE、PUT、GET,使用不同方法对资源进行操作。
分别对应 添加、 删除、修改、查询

🌴传统方式操作资源

http://127.0.0.1/item/queryUser.action?id=1       查询,GET 
http://127.0.0.1/item/saveUser.action             新增,POST 
http://127.0.0.1/item/updateUser.action           更新,POST 
http://127.0.0.1/item/deleteUser.action?id=1      删除,GET或POST

🌴RestFul请求方式
可以通过 GET、 POST、 PUT、 PATCH、 DELETE 等方式对服务端的资源进行操作。其中:

  • GET 用于查询资源,
  • POST 用于创建资源,
  • PUT 用于更新服务端的资源的全部信息,
  • DELETE 用于删除服务端的资源。
public class RestController {

    @GetMapping("/rest")
    public void test01(){
        System.out.println("test01: ");
    }  

    @PostMapping("/rest")
    public void test02(){
        System.out.println("test02: ");
    }

    @DeleteMapping("/rest")
    public void test03(){
        System.out.println("test03:");
    }

    @PutMapping("/rest")
    public void test04(){
        System.out.println("test04: ");
    }

    @PatchMapping("/rest")
    public void test05(){
        System.out.println("test05: ");
    }

}

🌴表单发送PUT请求设置方式

 <form action="rest/r" method="post">
        <input type="hidden" name="_method" value="PUT">
        <p><input type="text" placeholder="请输入id" name="id"></p>
        <p><input type="text" placeholder="请输入姓名" name="username"></p>
        <p><input type="date" placeholder="请输入生日" name="birth"></p>
        <p><input type="submit"></p>
 </form>

🌴设置web.xml

<filter>
       <filter-name>Hidden</filter-name>
       <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
    </filter>

<filter-mapping>
    <filter-name>Hidden</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

🌴REST风格传参问题

 @GetMapping("/login/{username}/{password}")
    public void login(@PathVariable String username, @PathVariable String password, HttpServletResponse res) throws IOException {
        System.out.println(username+"::"+password);
        //响应json格式的字符串
        res.setContentType("application/json;charset=utf-8");
        JsonResult result = JsonResult.builder().code(200).count(100L).data(null).msg("ok").build();
        res.getWriter().write(result.toJSONString());
    }

🌴数据提交中文乱码的处理

<!--解决中文乱码-->
    <filter>
        <filter-name>encoding</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>utf-8</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>encoding</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

🚩四 SpringMVC静态资源处理

1.配置静态资源的路径

<mvc:resources mapping="/static/**" location="/static/"/>

2.配置使用tomcat的servlet处理器

<mvc:default-servlet-handler/>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/383905.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Flask自定义接口,实现mock应用

问题&#xff1a;后端接口已提供&#xff0c;前端需要依赖后端接口返回的数据进行前端页面的开发&#xff0c;如何配合前端&#xff1f; mock接口 flask自定义接口实现查询接口&#xff1a;查询全部、部分查询 具体看下面的代码&#xff1a; #导入包 from flask import Fla…

企业如何选择固定资产管理系统?

如何促进企业内部信息化的建设&#xff0c;实现企业的高效管理和运转&#xff0c;是企业管理员经常考虑的问题。尤其是企业资金占比较多的固定资产该如何高效管理&#xff0c;是大家经常你讨论的问题。我们都知道行政部门管理着百上千件物品&#xff0c;且还要定期进行盘点&…

【python】标准库详解

注&#xff1a;最后有面试挑战&#xff0c;看看自己掌握了吗 文章目录Standard Library简介python内置对象如何安装发布第三方模块10最好用的模块汇总包的本质datetime模块案例Math模块random模块OS模块sys模块time模块总结自定义模块标准库模块用help查看time模块常用第三方库…

30 openEuler使用LVM管理硬盘-简介和安装

文章目录30 openEuler使用LVM管理硬盘-简介和安装30.1 LVM简介30.1.1 基本概念30.2 安装30 openEuler使用LVM管理硬盘-简介和安装 30.1 LVM简介 LVM是逻辑卷管理&#xff08;Logical Volume Manager&#xff09;的简称&#xff0c;它是Linux环境下对磁盘分区进行管理的一种机…

【苹果内购支付】关于uniapp拉起苹果内购支付注意事项、实现步骤以及踩过的坑

前言 Hello&#xff01;又是很长时间没有写博客了&#xff0c;因为最近又开始从事新项目&#xff0c;也是第一次接触关于uniapp开发原生IOS应用的项目&#xff0c;在这里做一些关于我在项目中使用苹果内购支付所实现的方式以及要注意的事项&#xff0c;希望能给正在做uniapp开…

Hive 数据倾斜

数据倾斜&#xff0c;即单个节点任务所处理的数据量远大于同类型任务所处理的数据量&#xff0c;导致该节点成为整个作业的瓶颈&#xff0c;这是分布式系统不可能避免的问题。从本质来说&#xff0c;导致数据倾斜有两种原因&#xff0c;一是任务读取大文件&#xff0c;二是任务…

Centos7 服务器基线检查处理汇总

1、服务器超时设置 问题描叙 TMOUT的值大于key2且小于等于{key2}且小于等于key2且小于等于{key1}视为合规 查看命令&#xff1a;export检测结果 超时时间:0处理方式 备份/etc/profile文件 cp /etc/profile /etc/profile_bak编辑profile文件 vim /etc/profile修改/新增 TMO…

Spring Cloud(微服务)学习篇(三)

Spring Cloud(微服务)学习篇(三) 1 nacos中使用openFeign(调用方式)实现短信发送 1.1 在shop-sms-api中创建com.zlz.shop.sms.api.service/vo/dto/util,目录结构如下所示 1.2 在pom.xml(shop-sms-api)中加入如下依赖 <dependencies><dependency><groupId>…

西电算法分析与设计核心考点汇总(期末真题,教材算法导论)

文章目录前言一、历年考题1.1 判断题1.2 单选题1.3 复杂度计算1.4 分治1.5 算法设计&#xff08;01背包&#xff0c;最短路径&#xff09;1.6 最大子数组问题1.7 算法设计&#xff08;最长回文串&#xff09;二、核心考点2.1 概述部分考点2.1.1 循环不变式loop-invariants2.1.2…

绪论 基本概念

数据结构 第一章 绪论 概念 数据data&#xff1a;是对客观事物的符号表示。在计算机科学中是指所有能输入到计算机中并被计算机程序处理的符号的总称。 数据元素(data element:是数据的基本单位&#xff0c;在计算机程序中通常作为一个整体进行考虑和处理。 数据对象(data …

软件测试面试题和简历模板(面试前准备篇)

一、问题预测 1、让简单介绍下自己&#xff08;这个不用说了每次面试开场&#xff09; 面试官&#xff0c;你好&#xff0c;我叫xxx&#xff0c;xx年本科毕业&#xff0c;从事软件测试将近3年的时间。在此期间做过一些项目也积累过一些经验&#xff0c;能够独立地完成软件测试…

经典的卷积神经网络(VGG,GoogLeNet等)

LeNet LeNet原文地址&#xff1a;https://ieeexplore.ieee.org/abstract/document/726791 Lenet是一个 7 层的神经网络&#xff08;不包含输入层&#xff09;&#xff0c;包含 3 个卷积层&#xff0c;2 个池化层&#xff0c;2 个全连接层。它的网络结构图如下所示&#xff1a…

广州华锐互动:VR虚拟课件互动教学平台在学校教育中的影响和作用

VR虚拟课件互动教学平台是广州华锐互动为各大高校开发的一款基于VR虚拟现实技术的教学工具&#xff0c;VR虚拟课件互动教学平台中包含了各类VR互动课件以及相关教学资源&#xff0c;学生可以自主进入平台汇总进行沉浸式的学习体验&#xff0c;帮助学生更好地理解学习相关教学内…

自动化实战-对个人博客系统实现web自动化测试

基于selenium和JUnit5实现的自动化测试用例 一、使用脑图编写web自动化测试用例 下图就是根据博客系统创建的自动化测试用例脑图 二、创建自动化项目&#xff0c;根据用例来实现脚本 Common包底下放着的是所有测试用例共用的方法&#xff0c;公共类&#xff1b; Test包底下就是…

BERT学习

非精读BERT-b站有讲解视频&#xff08;跟着李沐学AI&#xff09; &#xff08;大佬好厉害&#xff0c;讲的比直接看论文容易懂得多&#xff09; 写在前面 在计算MLM预训练任务的损失函数的时候&#xff0c;参与计算的Tokens有哪些&#xff1f;是全部的15%的词汇还是15%词汇中真…

浅谈babel原理

1. babel简介 Babel 的前身是 6to5&#xff0c;6to5 是 2014 年 发布的&#xff0c;主要功能是 就是 ES6 转成 ES5。后改名babel。 2. Babel用途 转译 esnext、typescript 等到目标环境支持的 js 高级语言到到低级语言叫编译&#xff0c;高级语言到高级语言叫转译代码转换 tar…

MySQL 上亿大表如何优化?

背景XX 实例&#xff08;一主一从&#xff09;xxx 告警中每天凌晨在报 SLA 报警&#xff0c;该报警的意思是存在一定的主从延迟。&#xff08;若在此时发生主从切换&#xff0c;需要长时间才可以完成切换&#xff0c;要追延迟来保证主从数据的一致性&#xff09;XX 实例的慢查询…

李群李代数求导-常用求导公式

参考 A micro Lie theory for state estimation in robotics manif issues 116 常用求导公式 Operation左雅克比右雅克比X−1\mathcal{X}^{-1}X−1JXX−1−I\mathbf{J}_{\mathcal{X}}^{\mathcal{X}^{-1}}\mathbf{-I}JXX−1​−IJXX−1−AdX\mathbf{J}_{\mathcal{X}}^{\mathc…

Go中sync 包的 Cond 使用

文章目录背景Cond 简介使用示例Signal的使用场景Broadcast的使用场景注意事项背景 编写代码过程中&#xff0c; 通常有多个主协程和多个子协程进行协作的过程&#xff0c;比如通过 WaitGroup 可以实现当所有子协程完成之后&#xff0c; 主协程再继续执行&#xff0c; 具体可参…

【ns-3】VS Code开发环境配置

文章目录前言1. 安装VS Code2. 安装CMake和C插件3. 配置环境3.1 配置代码智能提示3.2 配置build3.3 配置gdb调试后记参考文献前言 正所谓“工欲善其事必先利其器”&#xff0c;本篇总结一下ns-3在VS Code开发环境下的配置。 版本信息如下&#xff1a; Ubuntu 22.10ns-3.37VS…