SpringMVC | 请求与响应

简介: SpringMVC | 请求与响应

6d48a3192c904d3eb9c4b67e139db508.png

一、设置请求映射路径


当两个控制器中有相同的请求映射名时,即@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测试

70755b276436407ba913f4b2a245bdb6.png

测试结果:

d1713ce17a7e4ea68f6a935769f41ff7.png

至此,使用@RequestMapping定义请求路径前缀成功。


二、请求发送数据


2.1 get请求


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


2.2 post请求


c143029072904a8bb47bfb756ffaaa1b.png


三、请求乱码问题


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请求发送中文时会乱码


1797dda0ce9f49d29a54dede4c0aa590.png

f60a0c06aab048dba1739582158a3f63.png

解决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};
    }
}


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


153d02642dc24a88987403d5c1e9efbf.png


四、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 普通参数

c1e7e5dd618f4db5bf9c10b47ab80f16.png

1c973e170155485eaf1a94c387ad6b74.png


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 +
                '}';
    }
}

d63288af99f6441a9c122b5ea3cc5382.png

914606284cbf49ad9d2c5c52bde6ebcc.png


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;
    }
}

d5d4d84e24a148de8f9a4a1055e47240.png

3154659df1124e759f3bdab345a25b69.png


4.4 数组参数


9a519ceff9ec401ebd798d5ee554fc77.png


b158083d02d14b93b87fdd41ebf509cb.png


4.5 集合参数

427fa702019a477aa82cb35331bbf0a8.png

09006794bf3742d18e9f43ed2570372f.png


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格式


19af5fb7942340b1adb327ca64d509f1.png


5da59fa78e29455fa882ed830a854946.png


(2)yyyy-mm–dd格式

b78cc3ec3d7a497281f330d709d63230.png


2184e486e1b5442f881d579b88bcaff4.png


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


注意:hh-mm-ss是12小时计算的,小时不能超过12,否则报错;

如果要使用24小时计算的,需要使用yyyy-mm-dd HH-mm-ss格式。

72d3641c4be84a0c9e2a983e2c57622a.png


7a4d8561bec54056b93009796f8859b8.png


第一种格式是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数据

204f842b9fd94164a8a36635d0d41d23.png


(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数组


ed19fa64a7fd43c4adfaf7d504a85c28.png

c22da62d9f75469cb10c3460263df429.png

5.2 json对象

79bb69746f434608b9b969728144a141.png

ef5869117f164a6cac783594a8ff6f83.png


5.3 json对象数组


93d12a3238d54a5288b56b56f009b729.png

33d0509b6bcf4b40b4c9cd5d5c3240a2.png

注解类型 @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;
    }
}


b55b0914c1274d47977ac9240047a918.png

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>响应页面</title>
</head>
<body>
hello world!
</body>
</html>


6.1 响应页面

0adcf2e846754c0f9b5f0e15c1aa58d2.png

6.2 响应文本

99421d8d60d042d88b4f794e17e2e41f.png

6.3 响应JSON数据

3ddd1b4016424d0bbc3646bd5eeb41a6.png




相关文章
|
2月前
|
JSON 前端开发 Java
Spring MVC——获取参数和响应
本文介绍了如何在Spring框架中通过不同的注解和方法获取URL参数、上传文件、处理cookie和session、以及响应不同类型的数据。具体内容包括使用`@PathVariable`获取URL中的参数,使用`MultipartFile`上传文件,通过`HttpServletRequest`和`@CookieValue`获取cookie,通过`HttpSession`和`@SessionAttribute`获取session,以及如何返回静态页面、HTML代码片段、JSON数据,并设置HTTP状态码和响应头。
55 1
Spring MVC——获取参数和响应
|
2月前
|
前端开发 Java
学习SpringMVC,建立连接,请求,响应 SpringBoot初学,如何前后端交互(后端版)?最简单的能通过网址访问的后端服务器代码举例
文章介绍了如何使用SpringBoot创建简单的后端服务器来处理HTTP请求,包括建立连接、编写Controller处理请求,并返回响应给前端或网址。
56 0
学习SpringMVC,建立连接,请求,响应 SpringBoot初学,如何前后端交互(后端版)?最简单的能通过网址访问的后端服务器代码举例
|
6月前
|
JSON 前端开发 Java
【JavaEE进阶】 关于Spring MVC 响应
【JavaEE进阶】 关于Spring MVC 响应
60 3
|
6月前
|
JSON Java fastjson
SpringMVC(二)【请求与响应】(2)
SpringMVC(二)【请求与响应】
|
6月前
|
JSON 前端开发 数据格式
SpringMVC的数据响应-直接回写json字符串
SpringMVC的数据响应-直接回写json字符串
|
6月前
|
前端开发 Java Spring
SpringMVC的数据响应-19
SpringMVC的数据响应-19
|
6月前
|
JSON 前端开发 Java
spring mvc 请求与响应
spring mvc 请求与响应
30 0
|
6月前
|
前端开发 Java 应用服务中间件
SpringMVC(二)【请求与响应】(1)
SpringMVC(二)【请求与响应】
|
7月前
|
JSON 前端开发 Java
SpringMVC请求和响应
Spring MVC通过请求和响应的处理来实现Web应用程序的开发。请求通过控制器处理,响应通过视图渲染器生成最终的HTML响应,并返回给客户端。
75 4
|
7月前
|
JSON 前端开发 Java
Spring MVC响应结合RESTful风格开发,打造具有强大功能和良好体验的Web应用!
Spring MVC响应结合RESTful风格开发,打造具有强大功能和良好体验的Web应用!