1

【SpringMVC】请求与响应

 1 year ago
source link: https://blog.51cto.com/u_15640313/6854051
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

【SpringMVC】请求与响应

精选 原创

向阳花花花花 2023-07-26 09:19:44 博主文章分类:SSM ©著作权

文章标签 java springmvc ssm 文章分类 Java 后端开发 yyds干货盘点 阅读数180

一、设置请求映射路径

当两个控制器中有相同的请求映射名时,即@RequestMapping的值相同,会报错,这时可以在类上加这个注解,设置请求访问路径前缀。
(1)下面先看UserController类

@Controller
@RequestMapping("/user") // 设置访问路径前缀为/user
public class UserController {

    //    不可以有相同的@RequestMapping值
    @RequestMapping("/add")
    @ResponseBody
    public String add(String name) {
        System.out.println("user add ..." + name);
        return "name is "+name;
    }

    @RequestMapping("/select")
    @ResponseBody
    public String select() {
        System.out.println("user select ...");
        return "select";
    }
}

(2)启动tomcat7服务器,并使用Postman测试
【SpringMVC】请求与响应_springmvc
测试结果:

【SpringMVC】请求与响应_java_02
至此,使用@RequestMapping定义请求路径前缀成功。

二、请求发送数据

2.1 get请求

get请求就是在请求路径是加相关的参数,上面的设置请求路径中,就是使用的get请求发送数据name=1到后台。

2.2 post请求

【SpringMVC】请求与响应_springmvc_03
测试结果:
【SpringMVC】请求与响应_java_04

三、请求乱码问题

3.1 get请求处理中文乱码

在pom.xml文件中配置tomcat服务器插件时,加入uriEncoding标签,就可以解决get请求中文乱码问题。

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.2</version>
                <configuration>
                    <port>8080</port>
<!--                    解决get请求乱码问题-->
                    <uriEncoding>UTF-8</uriEncoding>
                </configuration>
            </plugin>
        </plugins>
    </build>

3.2 post请求处理中文乱码

当使用Post请求发送中文时会乱码

【SpringMVC】请求与响应_ssm_05
【SpringMVC】请求与响应_java_06
解决Post请求乱码问题,需要在ServletContainerInitConfig类中添加编码过滤器。

public class ServletContainersInitConfig extends AbstractAnnotationConfigDispatcherServletInitializer {
    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class[]{SpringConfig.class}; // 告知Spring环境
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class[]{SpringMvcConfig.class}; // 告知SpringMVC环境
    }

    @Override
    protected String[] getServletMappings() {
        return new String[]{"/"}; // 设置请求交由SpringMVC处理
    }

    // 处理Post请求乱码问题-get请求乱码-响应乱码

    @Override
    protected Filter[] getServletFilters() {
        CharacterEncodingFilter filter = new CharacterEncodingFilter();
        filter.setEncoding("UTF-8");
        return new Filter[]{filter};
    }
}

重启服务器,乱码问题解决!

【SpringMVC】请求与响应_ssm_07

四、6种请求参数传递

下面通过调用UserController类中的5个方法,方法名叫update()加数字,启动tomcat服务器,然后来演示前面5种参数传递。


@Controller
@RequestMapping("/user")
public class UserController {


    // (1)普通类型(参数名不同时,使用@RequestParam注解映射)
    @RequestMapping("/update1")
    @ResponseBody
    public String update1(@RequestParam("username") String name) {
        System.out.println("user update1 ..." + name);
        return "update1 user ";
    }


    // (2)引用类型
    @RequestMapping("/update2")
    @ResponseBody
    public String update2(User user) {
        System.out.println("user update2 ..." + user);
        return "update2 user";
    }

    // (3)嵌套引用类型
    @RequestMapping("/update3")
    @ResponseBody
    public String update3(User user) {
        System.out.println("user update3 ..." + user);
        return "update3 user";
    }

    // (4)数组类型(参数名要和形参名一致,不一致时使用@RequestParam注解)
    @RequestMapping("/update4")
    @ResponseBody
    public String update4(String[] values) {
        System.out.println("user update4 ...");
        for (String v : values) {
            System.out.println(v);
        }
        return "update4 user";
    }

    // (5) 集合类型
    @RequestMapping("/update5")
    @ResponseBody
    public String update5(@RequestParam List<String> list) {
        System.out.println("user update5 ..." + list);
        return "update5 user";
    }
}

4.1 普通参数

【SpringMVC】请求与响应_springmvc_08
【SpringMVC】请求与响应_ssm_09

4.2 实体类参数

首先准备好一个实体类User,成员变量Cup类在下一点


public class User {

    private String name;
    private Integer age;
    // 加入引用类型Cup
    private Cup cup;

    public Cup getCup() {
        return cup;
    }

    public void setCup(Cup cup) {
        this.cup = cup;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", cup=" + cup +
                '}';
    }
}

【SpringMVC】请求与响应_ssm_10
【SpringMVC】请求与响应_java_11

4.3 嵌套实体类的实体类参数

上面的User类中,其实嵌套了Cup类,下面是Cup类的代码


public class Cup {

    private String cupName;
    private Integer weight;

    @Override
    public String toString() {
        return "Cup{" +
                "cupName='" + cupName + '\'' +
                ", weight=" + weight +
                '}';
    }

    public String getCupName() {
        return cupName;
    }

    public void setCupName(String cupName) {
        this.cupName = cupName;
    }

    public Integer getWeight() {
        return weight;
    }

    public void setWeight(Integer weight) {
        this.weight = weight;
    }
}
【SpringMVC】请求与响应_springmvc_12
【SpringMVC】请求与响应_ssm_13

4.4 数组参数

【SpringMVC】请求与响应_ssm_14
【SpringMVC】请求与响应_ssm_15

4.5 集合参数

【SpringMVC】请求与响应_ssm_16
【SpringMVC】请求与响应_java_17

4.6 日期参数

下面通过调用BookController类中的3个date()加数字方法,使用@DateTimeFormat注解定义日期格式从而完成转换。


@Controller
@RequestMapping("/book")
public class BookController {

    //    (1)yyyy/mm/dd格式
    @RequestMapping("/date1")
    @ResponseBody
    public String date1(Date date1) {
        System.out.println("date1 ..." + date1);
        return "date1";
    }

    // (2)yyyy-mm--dd格式
    @RequestMapping("/date2")
    @ResponseBody
    public String date2(@DateTimeFormat(pattern = "yyyy-mm-dd") Date date2) {
        System.out.println("date2 ..." + date2);
        return "date2";
    }

    // (3)yyyy-mm-dd hh-mm-ss格式
    @RequestMapping("/date3")
    @ResponseBody
    public String date3(@DateTimeFormat(pattern = "yyyy/mm/dd hh/mm/ss") Date date3) {
        System.out.println("date3 ..." + date3);
        return "date3";
    }

}

(1)yyyy/mm/dd格式

【SpringMVC】请求与响应_java_18

【SpringMVC】请求与响应_springmvc_19

(2)yyyy-mm–dd格式

【SpringMVC】请求与响应_springmvc_20

【SpringMVC】请求与响应_ssm_21

(3)yyyy-mm-dd hh-mm-ss格式

注意:hh-mm-ss是12小时计算的,小时不能超过12,否则报错;
如果要使用24小时计算的,需要使用yyyy-mm-dd HH-mm-ss格式。

【SpringMVC】请求与响应_java_22

【SpringMVC】请求与响应_ssm_23

第一种格式是Spring默认转化模式,第二、三种情况要使用@DateTimeFormat注解表名转化的格式pattern,具体看上面的代码。

五、json数据传递

步骤:
(1)在pom.xml文件中导入json数据转换依赖

<!--        json,如果是其他的json转换器可能不支持,建议使用这个jar包-->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.9.0</version>
        </dependency>

(2)在SpringMVC配置类中开启自动转换支持

@Configuration
@ComponentScan("com.itxiaoguo.controller")
@EnableWebMvc // 根据类型匹配相应的转换器(如JSON转换器,日期转换器)

public class SpringMvcConfig {
}

(3)在Postman发送json数据

【SpringMVC】请求与响应_java_24
(4)使用BookController类,这里将测试日期转化的方法删除了,具体看下面代码,Send发送数据测试,分别由下面三种情况。

@Controller
@RequestMapping("/book")
public class BookController {

    // (1)json数组
    @RequestMapping("/json1")
    @ResponseBody
    public String json1(@RequestBody List<String> list) {
        System.out.println("json1 ..." + list);
        return "json 1";
    }

    // (2)json对象
    @RequestMapping("/json2")
    @ResponseBody
    public String json2(@RequestBody User user) {
        System.out.println("json2 ..." + user);
        return "json 2";
    }

    // (3)json对象集合
    @RequestMapping("/json3")
    @ResponseBody
    public String json3(@RequestBody List<User> user) {
        System.out.println("json3 ..." + user);
        return "json 3";
    }

}

5.1 json数组

【SpringMVC】请求与响应_springmvc_25

【SpringMVC】请求与响应_java_26

5.2 json对象

【SpringMVC】请求与响应_springmvc_27

【SpringMVC】请求与响应_java_28

5.3 json对象数组

【SpringMVC】请求与响应_springmvc_29

【SpringMVC】请求与响应_ssm_30

注解类型 @RequestParam注解 @RequestBody注解
适用情况 Get/Post/URL请求传参 JSON传参

下面通过CupController类来测试下面三种响应,在webapp下新建了一个page.jsp页面,打印helloworld!


@Controller
@RequestMapping("/cup")
public class CupController {

    // (1)响应页面(不用加@ResponseBody注解)
    @RequestMapping("/page")
    public String page() {
        System.out.println("page ...");
        return "../page.jsp";
    }

    // (2)响应字符串
    @RequestMapping("/str")
    @ResponseBody
    public String str() {
        System.out.println("str ...");
        return "hello";
    }

    // (3)响应JSON数据
    @RequestMapping("/json")
    @ResponseBody
    public User json() {
        System.out.println("json ...");
        User user = new User();
        user.setName("xiaoguo");
        user.setAge(18);
        return user;
    }
}
【SpringMVC】请求与响应_ssm_31
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>响应页面</title>
</head>
<body>
hello world!
</body>
</html>

6.1 响应页面

【SpringMVC】请求与响应_ssm_32

6.2 响应文本

【SpringMVC】请求与响应_ssm_33

6.3 响应JSON数据

【SpringMVC】请求与响应_java_34
至此,@ResponseBody注解的作用是设置当前方法返回值作为响应体。
  • 收藏
  • 评论
  • 分享
  • 举报

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK