3.5 Spring MVC参数传递

news/2024/7/7 20:25:37

Spring MVC的Controller接收请求参数的方式有多种,本节主要介绍Spring MVC下的HttpServletRequest、基本数据类型、Java Bean、数组、List、Map、JSON参数传递方式,同时解决POST请求中文乱码问题。

1. HttpServletRequest参数传递

@Controller
@RequestMapping("/param")
public class ParamController {
    /**
     *  通过HttpServletRequest接收参数
     */
    @RequestMapping("/servlet")
    public void servlet(HttpServletRequest request, HttpServletResponse response) throws IOException {
        String name = request.getParameter("name");
        System.out.println("name=" + name);
        PrintWriter writer = response.getWriter();
        writer.print("hello " + name);
        writer.flush();
        writer.close();
    }
}

2. 基本数据类型参数传递

基本数据类型以及他们的包装类。

@Controller
@RequestMapping("/param")
public class ParamController {
    /**
     * 使用基本数据类型和String类型
     */
    @RequestMapping("/simple")
    @ResponseBody
    public String simple(int id, String name) throws IOException {
        String str = "id = " + id + ",name = " + name;
        System.out.println(str);
        return str;
    }
}

3. Java Bean参数传递

@Controller
@RequestMapping("/param")
public class ParamController {
    /**
     * JavaBean传递参数
     */
    @RequestMapping(value = "/bean",
            produces = "text/plain;charset=UTF-8",
            method = RequestMethod.POST)
    @ResponseBody
    public String paramBean(Student student){
        System.out.println(student);
        return student.toString();
    }
}

4. 数组参数传递

@Controller
@RequestMapping("/param")
public class ParamController {
    /**
     * 数组参数
     */
@RequestMapping(value = "/array",method = RequestMethod.POST)
@ResponseBody
public String array(String[] hobbies){
    for(String hobby : hobbies){
         System.out.println(hobby);
    }
    return "success";
}
}

5. List参数传递

@Controller
@RequestMapping("/param")
public class ParamController {
    /**
     * List参数
     */
@RequestMapping(value = "/list",method = RequestMethod.POST)
@ResponseBody
public String list(@RequestParam List<String> hobbyList){
    hobbyList.forEach(hobby -> System.out.println(hobby));
    return "success";
}
}

6. Map参数传递

@Controller
@RequestMapping("/param")
public class ParamController {
    /**
     * Map参数
     */
@RequestMapping(value = "/map",method = RequestMethod.POST)
@ResponseBody
public String map(@RequestParam Map<String,Object> map){
    System.out.println(map);
    return "success";
}
}

7. JSON参数传递

JSON格式采用键值对的方式来表示数据,由花括号 {} 包含对象,由方括号 [] 包含数组,可通过JSON在线解析工具进行校验/格式化,具体格式如下:

  • 对象

对象是一个无序的键/值对集合,每个键后面需要添加一个冒号(:),键/值对之间使用逗号(,)分隔。

{
    "id": "1",
    "name": "zhangsan",
    "age":20
}
  • 数组

数组可以包含多个元素,每个元素之间使用逗号(,)分隔,可以包含简单值、对象或者其他数组。

[
    {
    "id": "1",
    "name": "zhangsan"
    },
    {
    "id": "2",
    "name": "zhangsan"
    }
]

Spring MVC可以使用Jackson框架作为JSON的转换器。

通过@RequestBody可以将前端的JSON参数转成Java Bean、Map、List等引用类型。

通过@ResponseBody可以将后端的Java Bean、Map、List等引用类型转成JSON结果输出。

使用Jackson时需要三个jar包jackson-databind.jar、jackson-core.jar、jackson-annotations.jar。如果Spring MVC创建的是Maven项目,仅需要依赖jackson-databind,因为它传递依赖了jackson-core和jackson-annotations。

@Controller
@RequestMapping("/json")
public class JsonController {
    /**
     * json bean
     */
    @RequestMapping(value = "/bean",method = RequestMethod.POST)
    @ResponseBody
    public Object bean(@RequestBody Student student){
        System.out.println(student);
        Map<String,Object> map = new HashMap<String,Object>();
        map.put("code",200);
        map.put("msg","success");
        map.put("data",student.toString());
        return map;
    }
    /**
     * json map
     */
    @RequestMapping(value = "/map",method = RequestMethod.POST)
    @ResponseBody
    public Object map(@RequestBody Map<String,Object> jsonMap){
        System.out.println(jsonMap);
        Map<String,Object> map = new HashMap<String,Object>();
        map.put("code",200);
        map.put("msg","success");
        map.put("data",jsonMap);
        return map;
    }
    /**
     * json list
     */
    @RequestMapping("/list")
    @ResponseBody
    public Object list(@RequestBody List<Student> studentList){
        System.out.println(studentList);
        Map<String,Object> map = new HashMap<String,Object>();
        map.put("code",200);
        map.put("msg","success");
        map.put("data",studentList);
        return map;
    }
}

8. Spring MVC解决POST请求中文乱码问题

Spring提供了CharacterEncodingFilter解决POST请求中的中文乱码问题,在web.xml中配置CharacterEncodingFilter。

<web-app>
  <!--解决POST中文乱码问题 过滤器-->
  <filter>
    <filter-name>encodingFilter</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>encodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
</web-app>

9. Spring MVC参数传递案例

基于Spring MVC实现HttpServletRequest、基本数据类型、Java Bean、数组、List、Map、JSON方式的参数传递。

案例实现详见链接:案例13 Spring MVC参数传递案例


http://lihuaxi.xjx100.cn/news/1436806.html

相关文章

SAP MM学习笔记17-在库品目评价中的标准原价 S 和移动平均价格 V

SAP中有2种价格&#xff0c;标准原价 S 和 移动平均价格 V。 1&#xff0c;标准原价 S 2&#xff0c;移动平均价格 V 在MM03 会计1 Tab中&#xff0c;现行评价区域中&#xff0c;有原价管理区分。 比如下面这个物料 100-100&#xff0c; 它的原价管理区分是 S。 它的合计额…

SpringCloud总结

三步走 1、搭springboot项目 引入启动器 2、覆盖默认配置 3、springboot的引导类上加上注解&#xff0c;告诉eureka是服务还是客户端 什么是SpringCloud&#xff1f; 是一套微服务架构的解决方案&#xff0c;是很多组件的集合。 Eureka&#xff1a;注册中心 服务注册和发…

Unity3D高级编程:主程手记学习1

第一章 软件架构 Untiy 分层设计 分层后再分治

python 链表相关

python 链表相关 列表转链表尾插法头插法 链表转列表链表中间节点链表是否有环 链表反转合并链表合并两个有序链表 列表转链表 尾插法 res [1,2,3,4,5] # 以res列表第一项为新节点创建链表 head ListNode(res[0]) # 尾插法 p head for i in range(1, len(res)):# 节点下一…

互联网医院|线上医疗平台如何建设运营服务商?

互联网医院平台紧密结合了大数据和人工智能技术&#xff0c;为医疗服务提供了更精准和个性化的解决方案。通过对海量的医疗数据进行分析和挖掘&#xff0c;平台能够为医生提供更多准确可靠的参考依据&#xff0c;辅助医生做出更好的诊断和治疗决策。 在选择互联网医院建设运营服…

由浅入深C系列五:使用libcurl进行基于http get/post模式的C语言交互应用开发

使用libcurl进行基于http get/post模式的C语言交互应用开发 简介环境准备在线资源示例代码测试调用运行结果 简介 大多数在linux下的开发者&#xff0c;都会用到curl这个命令行工具。对于进行restful api的测试等&#xff0c;非常方便。其实&#xff0c;这个工具还提供了一个C…

Python Selenium 设置带账号密码的socks5代理,启动浏览器

selenium添加带有账密的socks5代理 我们都知道在使用selenium开发爬虫的时候不可避免的会使用socks5高匿名代理。一般情况下我们使用方法如下(开发语言为python)&#xff1a; from selenium import webdriver chrome_options webdriver.ChromeOptions() chrome_options.add_…

Clickhouse学习系列——一条SQL完成gourp by分组与不分组数值计算

笔者在近一两年接触了Clickhouse数据库&#xff0c;在项目中也进行了一些实践&#xff0c;但一直都没有一些技术文章的沉淀&#xff0c;近期打算做个系列&#xff0c;通过一些具体的场景将Clickhouse的用法进行沉淀和分享&#xff0c;供大家参考。 首先我们假设一个Clickhouse数…