postman进行post、get参数传递及中文乱码和各类型参数传递和json格式传参和日期型参数传递和响应数据传回

news2024/11/29 3:51:09

postman是一种测试工具
用postman直接在其上输入参数名和参数值就行,不用区分post和get请求方法,当然java代码要改变一点,在响应注解的方法里面添加和postman中输入的参数名一样的形参

get请求:
在这里插入图片描述
代码:注意在响应注解的方法里面新添加了形参,其就对应着上面图片中的参数名

package com.itjh.servletmvc;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
//控制器
public class sermvc {
    //请求时的访问路径
    @RequestMapping("/sav")
    //返回给浏览器的响应数据
    @ResponseBody
    public String save(String name){
        System.out.println("spring.......mvc.."+name);
        return "{'name':'zhangsan'}}";
    }
}

测试类:

package com.itjh.Config.test;

import com.itjh.Config.SpringmvcConfig;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.servlet.support.AbstractDispatcherServletInitializer;

public class SpringmvcTest extends AbstractDispatcherServletInitializer {
    //加载springmvc容器
    @Override
    protected WebApplicationContext createServletApplicationContext() {
        AnnotationConfigWebApplicationContext context=new AnnotationConfigWebApplicationContext();
        //注册一下springmvc容器
        context.register(SpringmvcConfig.class);
        System.out.println("加载springmvc容器");
        return context;
    }
    //从前端过来的请求,被拦截,即设置哪些请求归springmvc管
    @Override
    protected String[] getServletMappings() {
        System.out.println("拦截。。。");
        return new String[]{"/"};
    }
    //加载spring容器
    @Override
    protected WebApplicationContext createRootApplicationContext() {
        return null;
    }
}

post请求:换一些地方:红圈
在这里插入图片描述
代码:和上面的get请求一样,不用变

总结:请求并且发送给服务器参数之后,这里的代码用封装好的request获得参数,然后再用手动创建的返回方法进行显示传进来的参数

中文乱码

post请求的解决方法:添加一个过滤器,再经过过滤器时进行手动重新编码,即解码,当然,这个只对post请求管用
在这里插入图片描述

测试类:添加了一个方法,看注释

package com.itjh.test;

import com.itjh.Config.SpringConfig;
import com.itjh.Config.SpringmvcConfig;
import org.springframework.web.filter.CharacterEncodingFilter;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
import javax.servlet.Filter;


public class SpringmvcTest extends AbstractAnnotationConfigDispatcherServletInitializer {
    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class[]{SpringConfig.class};
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class[]{SpringmvcConfig.class};
    }

    @Override
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }

    @Override
    protected Filter[] getServletFilters() {
        //创建filter过滤器
        CharacterEncodingFilter filter=new CharacterEncodingFilter();
        //将传进来的经过TomCat编码后的东西,进行重新的UTF-8的编码,也就是解码
        //这样返回给页面的就不是乱码了,页面是UTF-8
        filter.setEncoding("UTF-8");
        return new Filter[]{filter};
    }
}

各类型参数传递

普通参数,pojo,嵌套pojo,数组,集合
代码实现:

第一种(save1):Java中的参数name和请求参数username不一致时,就利用@RequestParam(“name”)
二:会根据Java中的参数创建其对象中的属性
三:
四:请求参数的参数名一致,值不同
五:按理会创建集合的属性,但是List是接口,自然没有属性,不像上面的pojo类,所以需要将传进来的参数转成数据,作为数据传给Java中的集合,要利用@RequestParam,他就有这个功能

package com.itjh.servletmvc;

import com.itjh.pojo.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.Arrays;
import java.util.List;


@Controller
//控制器
public class sermvc {
    //请求时的访问路径
    @RequestMapping("/sav")
    //返回给浏览器的响应数据
    @ResponseBody
    public String save(String name){
        System.out.println("spring.......mvc.."+name);
        return "{'name':'zhangsan'}}";
    }
    @RequestMapping("/save1" )
    @ResponseBody
    //请求参数作为数据与下面注解中的参数应当一致,
    //下面注解表示请求参数name和username关联起来
    //后面的age没有指定的话,应当是默认注解@。。。。。。。("age")
    public String save1(@RequestParam("name") String username, int age){
        System.out.println("save....1....."+username+"的年龄"+age);
        return "{'name':'lisi'}";
    }
    @RequestMapping("/save2" )
    @ResponseBody
    //请求参数名应当与实体类中的属性名一致
    public String save2(User user){
        System.out.println("save....2....."+user.toString());

        return "{'name':'wangwu'}";
    }
    @RequestMapping("/save3" )
    @ResponseBody
    //请求参数名应当与实体类中的属性名一致
    public String save3(User user){
        System.out.println("save....3....."+user.toString());
        return "{'name':'liuneng'}";
    }
    @RequestMapping("/save4" )
    @ResponseBody
    //数组名应当与参数请求名一致
    public String save4(String[] name){
        System.out.println("save....4....."+Arrays.toString(name));
        return "{'name':'liuneng'}";
    }
    @RequestMapping("/save5" )
    @ResponseBody
    //数组名应当与参数请求名一致
    public String save5(@RequestParam List<String> list){
        System.out.println("save....5....."+list.toString());
        return "{'name':'liuneng'}";
    }
}

json格式传参

都需要在方法里面的参数内加@RequesetBody
json格式传参需要进行转换,则需要jar包:

<dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.9.0</version>
    </dependency>

完整pom.xml文件:加一个阿里云的镜像文件,免得可能下载不到jar包

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>org.example</groupId>
  <artifactId>sptingmvc</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>

  <dependencies>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>4.0.1</version>
      <scope>provided</scope>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>5.2.10.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.9.0</version>
    </dependency>
  </dependencies>
  <repositories>
    <repository>
      <id>nexus-aliyun</id>
      <name>nexus-aliyun</name>
      <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
      <releases>
        <enabled>true</enabled>
      </releases>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
    </repository>
  </repositories>

  <build>
    <plugins>
      <!-- tomcat插件 -->
      <plugin>
        <groupId>org.apache.tomcat.maven</groupId>
        <artifactId>tomcat7-maven-plugin</artifactId>
        <version>2.2</version>
      </plugin>
    </plugins>
  </build>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>
  </properties>


</project>

还需要在配置类中加入注解,这样才会开启转换json:@EnableWebMvc

package com.itjh.Config;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;

@Configuration
@ComponentScan("com.itjh.servletmvc")
@EnableWebMvc
public class SpringmvcConfig {
}

测试类:都需要加@RequesetBody,因为现在再postman中的body中传参

list底层是数组;
pojo型需要写成json格式;
list<实体类>需要数组里面加json格式;

代码:

@RequestMapping("/save6" )
    @ResponseBody
    //数组名应当与参数请求名一致
    public String JsonArraySave6(@RequestBody List<String> id){
        System.out.println("save....6....."+id.toString());
        return "{'nam':'yangjian'}";
    }
    @RequestMapping("/save7" )
    @ResponseBody
    //数组名应当与参数请求名一致
    public String JsonPojoSave7(@RequestBody User user){
        System.out.println("save7方法运行"+user);
        System.out.println("save....7.....");
        return "{'nam':'yangjian'}";
    }
    @RequestMapping("/save8" )
    @ResponseBody
    //数组名应当与参数请求名一致
    public String JsonPojoSave8(@RequestBody List<User> user){
        System.out.println("save8方法运行"+user.toString());
        System.out.println("save....8.....");
        return "{'nam':'yangjian'}";
    }

postman传参主要看保存的文件

postman:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

日期型参数传递

根据请求数据的日期格式设置相应参数的格式:其中的pattern后面的参数不要自己起名字,按照图片上的来呦
在这里插入图片描述
postman请求:
在这里插入图片描述

代码实现:

    @RequestMapping("/save9" )
    @ResponseBody
    //数组名应当与参数请求名一致
    public String JsondataSave9(Date date1, 
    @DateTimeFormat(pattern = "yyyy-MM-dd") Date date2,
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") Date date3){
        System.out.println("date:"+date1);
        System.out.println("date:"+date2);
        System.out.println("date:"+date3);
        return "{'nam':'yangjian'}";
    }

结果:

信息: 1 Spring WebApplicationInitializers detected on classpath
四月 13, 2023 4:55:49 下午 org.apache.catalina.core.ApplicationContext log
信息: Initializing Spring DispatcherServlet 'dispatcher'
[INFO] Initializing Servlet 'dispatcher'
[INFO] Completed initialization in 717 ms
四月 13, 2023 4:55:49 下午 org.apache.coyote.AbstractProtocol start
信息: Starting ProtocolHandler ["http-bio-8080"]
date:Sat Dec 15 00:00:00 CST 2018
date:Mon Nov 16 00:00:00 CST 2020
date:Fri Dec 20 08:20:30 CST 2019

这个String类型传换成Date类型的底层是用了一个接口:刚才用的转换就是他的实现类做的事,他的实现类有很多,有些转化默认没有开启,就需要手动添加@EnableWebMvc
在这里插入图片描述

响应数据传回

上面返回值都是String类型,返回给postman页面的都是自定义的字符数据,而现在要真正学返回值,即返回值类型
返回类型可以是pojo类,集合等等
看代码:返回值直接写就行,加了注解@ResponseBody和导入了jar包jackson-databind之后,他会自动帮你将返回值类型转换成json类型数据返回

@RequestMapping("/save10")
    @ResponseBody
    public User jsonsave10(){
        User user=new User();
        user.setAge(12);
        user.setUsername("海皮");
        Student student=new Student();
        student.setAddress("中国");
        student.setPhone(123456);
        user.setStudent(student);
        return user;
    }
    @RequestMapping("/save11")
    @ResponseBody
    public List<User> save11(){
        List<User> list=new ArrayList<>();
        User user1=new User();
        user1.setAge(12);
        user1.setUsername("海皮");
        User user2=new User();
        user2.setAge(19);
        user2.setUsername("哈喽");
        Student student=new Student();
        student.setAddress("中国");
        student.setPhone(123456);
        user1.setStudent(student);
        user2.setStudent(student);
        list.add(user1);
        list.add(user2);
        return list;
    }

返回的数据:上面这个代码的第二个方法
在这里插入图片描述

注解@ResponseBody对于数据的转换借助了一个接口(即类转换器,看下面的图)的实现类进行
在这里插入图片描述

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

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

相关文章

JUC源码系列-AQS独占锁获取

前言 AQS&#xff08;AbstractQueuedSynchronizer&#xff09;是JAVA中众多锁以及并发工具的基础&#xff0c;其底层采用乐观锁&#xff0c;大量使用了CAS操作&#xff0c; 并且在冲突时&#xff0c;采用自旋方式重试&#xff0c;以实现轻量级和高效地获取锁。 AQS虽然被定义…

JUC源码系列-AQS的Condition的接口实现

前言 本篇文章是基于线程间的同步与通信(4)——Lock 和 Condtion 这篇文章写的&#xff0c;在那篇文章中&#xff0c;我们分析了Condition接口所定义的方法&#xff0c;本篇我们就来看看AQS对于Condition接口的这些接口方法的具体实现。 概述 我们在前面介绍Conditon的时候说…

es6和commonJs的区别

一、export语句的区别&#xff1a; ES6 和 CommonJS 是两种不同的 JavaScript 模块化规范&#xff0c;它们的 export 语句有一些区别&#xff1a; export 关键字&#xff1a;在 ES6 中&#xff0c;使用 export 关键字来导出模块中的变量、函数、类等&#xff1b;而在 CommonJS…

【C语言】详解数组(数组的创建和初始化、数组越界以及作为函数参数)

简单不先于复杂&#xff0c;而是在复杂之后。 目录 1. 一维数组的创建和初始化 1.1 数组的创建 1.2 数组的初始化 1.3 一维数组的使用 1.4 一维数组在内存中的存储 1.5 sizeof 和 strlen 2. 二维数组的创建和初始化 2.1 二维数组的创建 2.2 二维数组的初始化 …

Java构造器与this关键字

Java构造器与this关键字\huge{Java构造器与this关键字}Java构造器与this关键字 Java类构造器 作用 在类中定义用于初始化一个类的对象&#xff0c;并且返回对象的地址。&#xff08;可以理解为就是创建一个对象&#xff09; 调用实例 Car c new Car(); //无参数调用格式 …

离线安装rancher2.4管理K8S集群并部署服务

在一些公司安装K8S集群或者rancher等软件&#xff0c;都是没有网络的&#xff0c;在这种情况下&#xff0c;需要自己想办法安装&#xff01;这里给大家介绍在没有网络的情况下&#xff0c;怎么安装rancher和K8S集群&#xff0c;最后在用rancher管理K8S集群部署服务&#xff01;…

UDP的多点通信

文章目录一. 网络属性二. 多点通信**2.1. 单播**2.2. 广播2.2.1 广播的发送端流程 (类似UDP客户端)2.2.2 广播的接收端流程(类似UDP服务器)2.3. 组播2.3.1组播的发送端流程 (类似UDP客户端)2.3.2组播的接收端流程(类似UDP服务器)2.3.3 加入多播组示例代码一. 网络属性 setsock…

对 FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_CLEAR_TOP 的实践

对 FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_CLEAR_TOP 的实践 前言 昨天编写了一篇博文: Activity启动模式与栈的使用小结&#xff0c;里面参考了下面这篇文章&#xff1a; Android面试官装逼失败之&#xff1a;Activity的启动模式 对里面关于 FLAG_ACTIVITY_CLEAR_TOP| F…

什么是开源?

从开源空间&#xff08;Open Source Space&#xff09;说起开源空间&#xff08;Open Source Space&#xff09;&#xff1a;一个边界封闭&#xff0c;内部开放的空间。在这个空间里&#xff0c;人们围绕数字公共产品&#xff08;服务&#xff09;&#xff0c;进行开放式协作。…

零售数据分析之操作篇13:图表联动分析

各位数据的朋友&#xff0c;大家好&#xff0c;我是老周道数据&#xff0c;和你一起&#xff0c;用常人思维数据分析&#xff0c;通过数据讲故事。 上期回顾与作业讲解 上一讲讲了子查询的应用场景&#xff0c;即有一个结果集&#xff08;ds2&#xff09;的筛选条件是来自另外…

【C++】继承---上(继承的引入及使用详解、切片赋值和作用域)

前言&#xff1a; 我们在学习C的第一节课就了解到C是一门面向对象的语言&#xff0c;面向对象的语言有三大特性&#xff1a; 封装、继承、多态 此前我们学习了封装&#xff0c;比如模拟实现vector&#xff0c;string或者迭代器等&#xff0c;不仅有利于我们的维护和管理&#…

【uniapp】Vue3版本项目出现Proxy代理对象无法正常取值问题解决

习惯了使用Vue2版本的uniapp项目&#xff0c;直到后来想升级版本&#xff0c;改用Vue3版本就会遇到一些无法正常取值&#xff08;访问属性&#xff09;问题&#xff0c;其中最显著问题就是Proxy代理造成的 在我们用浏览器调试的时候&#xff0c;遇到如同下图这样&#xff0c;出…

Spring Boot 项目如何实现上传头像功能?

目录 设计思路 效果展示 ​编辑 分析 前后端交互接口 请求 响应 代码实现和详细注释 数据库设计 自定义资源映射 前后端交互 客户端开发 服务器开发 设计思路 效果展示 分析 实现这个功能只要弄清楚以下几点即可&#xff1a; 怎么将头像数据发送给服务器&#x…

九龙证券|服务器龙头获资金连续抢筹,尾盘主力抢筹前期大热门股

今天&#xff0c;核算机职业取得主力大手笔抢筹。 今天主力资金净流出53.89亿元&#xff0c;其间创业板净流出3.19亿元&#xff0c;沪深300成份股净流出7.61亿元。 申万一级职业中&#xff0c;今天有19个职业上涨&#xff0c;传媒职业接连两日均涨近5%&#xff0c;居首位&…

stm32当中GPIO输出知识点汇总(GPIO的八种模式及其原理)

一、GPIO工作模式. 1. 四种输入模式 GPIO_Mode_IN_FLOATING 浮空输入模式 GPIO_Mode_IPU 上拉输入模式 GPIO_Mode_IPD 下拉输入模式 GPIO_Mode_AIN 模拟输入模式 2. 四种输出模式 GPIO_Mode_Out_OD 开漏输出模式 GPIO_Mode_Out_PP 推挽输出模式 GPIO_Mod…

【剑指offer-C++】JZ79:判断是不是平衡二叉树

【剑指offer-C】JZ79&#xff1a;判断是不是平衡二叉树题目描述解题思路题目描述 描述&#xff1a;输入一棵节点数为 n 二叉树&#xff0c;判断该二叉树是否是平衡二叉树。 在这里&#xff0c;我们只需要考虑其平衡性&#xff0c;不需要考虑其是不是排序二叉树。 平衡二叉树…

Nginx实现负载均衡的多种方法演示

文章目录前言一、配置讲解1.1 轮询算法&#xff08;默认&#xff09;1.2 IP_HASH算法1.3 Weighted算法1.4 URL_HASH算法总结前言 Nginx是一款高性能的Web服务器和反向代理服务器,它具有占用内存小、并发处理能力强、稳定性高等优点&#xff0c;适用于高并发、高负载的Web应用场…

pandas之DataFrame基础

pandas之DataFrame基础1. DataFrame定义2. DataFrame的创建形式3. DataFrame的属性4. DataFrame的运算5. pandas访问相关操作5.1 使用 loc[]显示访问5.2 iloc[] 隐式访问5.3 总结6. 单层索引和多层级索引6.1 索引种类与使用6.2 索引相关设置6.3 索引构造6.4 索引访问6.5 索引变…

BGP选路实验(重点是各种策略)

实验拓扑 基础配置(完成IGP的配置) 首先完成各 个接口IP地址,环回接口地址等一些基本配置&#xff0c;实现直连之间的互相通信 在R4&#xff0c;R5上的配置类似 [Huawei]int g0/0/0 [Huawei-GigabitEthernet0/0/0]ip add 192.168.1.1 24 [Huawei-GigabitEthernet0/0/0]int g0/0…

低代码是什么意思

此前&#xff0c;阿里云智能总裁张建锋曾在钉钉发布会上表示&#xff1a;“未来的软件开发一定是碎片化的&#xff0c;低代码开发将成为未来几年的行业关键词。”这句话表明了低代码在过去两年的火爆程度&#xff0c;预示着低代码有望成为软件领域的新风口。 那低代码是什么意…