SpringMVC(二)【请求与响应】(2)

简介: SpringMVC(二)【请求与响应】

SpringMVC(二)【请求与响应】(1)https://developer.aliyun.com/article/1534204

2.5、JSON 传参

我们实际开发用到 JSON 的情况会很多很多,所以这里需要重点学习 JSON 的传参方法。

首先我们需要导入 json 转换格式的依赖,方便之后把不同的数据类型转为 json:

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

还需要注意的是,使用 Postman 发送 json 格式的数据需要使用:

c10494a7e62e540eb0b5a4eb1803aa60_275bcb5186f24bf0a6fa5570bb85e5fd.png

2.5.1、json 数组

1、给SpringMVC配置类添加注解 @EnablewebMvc

我们需要把 json 转为对象,必须给控制器类添加这个注解:

@Configuration
@ComponentScan("com.lyh.controller") // 扫描
@EnableWebMvc     // 开启 json 转对象的功能(这只是这个注解的功能之一)
public class SpringMvcConfig {
 
}
名称 类型 位置 作用
@EnableWebMvc 配置类注解 SpringMVC配置类上方 开启SpringMVC多项辅助功能(比如这里的json格式自动转换)
2、给服务端方法形参前添加注解 @RequestBody

       区别于之前我们同查询参数给 List 集合传递元素使用的注解 @RequestParam:

  • @RequestBody 主要用于处理请求体中的数据,比如这里传递 json 数据用的就是 http 请求体中的 raw 来传递的。
  • @RequestParam 主要用于处理查询参数中的数据。

b354f20a8c4e668d91890964b0fca6d9_c7602c6caaa2460c9290f85c9258b918.png

什么是查询参数?

       查询参数(Query Parameters)是在HTTP请求的URL中用于传递附加信息的键值对。它们通常出现在URL的“?”之后,并以“&”符号分隔多个参数。

名称 类型 位置 作用
@RequestBody 形参注解 SpringMVC控制器方法形参定义前面 将请求体中的数据参数传递给控制器方法形参
    @RequestMapping("/listParamForJson")
    @ResponseBody
    public String listParamForJson(@RequestBody List<String> likes){
        System.out.println("json数据传递"+likes.toString());
        return "{'module':'list common for json param'}";
    }

发送测试:  

3b52292e1891936596a30d25563fa248_a414c66ea6e0420591a6c2382b52b3bc.png

运行结果:

1c5ae6be45a4554c63526e86c0996876_9228b88983b44fec8831269dd8d15850.png

2.5.2、json 对象

    @RequestMapping("/pojoParamForJson")
    @ResponseBody
    public String pojoParamForJson(@RequestBody User user){
        System.out.println("json对象传递"+user.toString());
        return "{'module':'pojo for json param'}";
    }

cf5a06dfacd9aed41ee9fb15c5af0e9b_d5594e8b02c045a182f627ed09e966c5.png

2.5.3、json 对象数组

这里同样需要对形参添加一个注解 @RequestBody 来把

@RequestMapping("/listPojoParamForJson")
@ResponseBody
public String listPojoParamForJson(@RequestBody List<User> users){
    System.out.println("json对象数组传递");
    for (User user : users)
        System.out.println(user.toString());
    return "{'module':'list pojo for json param'}";
}

3a010cb2cfb19f582446427c842e0fd9_93b5769e754e4b8aa2dc6fa96cbedebf.png

       对于 json 对象数组数据的发送,Postman 会自动帮我们设置 Content-type 格式为 application/json:

43def2ee8a5a8decafe6a231df361455_1f9567075cdf4a0c9538e6357fd2b938.png

测试结果:

ccc4b1a2293872e012cef28c174cf68b_8b2f78c646e44bd3b7d0d1dab27d1c1d.png

2.6、日期类型参数传递

常见的日类型格式:

  • 2024-04-14
  • 2024/04/14(这种格式 SpringMVC 可以直接处理)
  • 04/14/2024

对于另外两种类型的日期格式,SpringMVC 要求通过 @DateTimeFormat 注解的 pattern 属性来指定日期的格式:

    @RequestMapping("/dateParam")
    @ResponseBody
    public String dateParam(@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") Date date){
        System.out.println("日期类型参数传递" + date.toString());
        return "{'module':'date param'}";
    }

测试:

d3e7d84e1d5f85a9c2cc2b5e46d8b9d1_afd69ed506704eac836c9d2d61dd111b.png

运行结果:

dc4a30a905b719a2ea48467c78e4690a_38f4000b4c9c4e4fb4a87a56bfd03464.png

2.7、类型转换器

       上面的日期格式转换其实也是依赖于上面我们在 SpringMVC 配置类上开启的注解:@EnableWebMvc

       而这些所有的格式转换全部依赖于底层的 Converter 接口:

52e566a5592ec9ca6e1cf7c7d4abaf2c_3f431ca5797f4683b524bd8b1dd3fd6a.png

       这个接口提供了大量的数据格式转换,其中一部分数据转换是默认开启的,但是大部分是不默认开启的,所以一定要记得通过注解 @EnableWebMvc 来开启类型转换!

3、响应

3.1、响应界面

在 webapp 下创建一个文件 index.jsp

ee7a721a1aa2ad724764a0e4dbba4281_4087afac78124dc883e4a7debc7952a8.png

在控制器类中设置响应方法并返回响应页面的路径:

@Controller
public class BookController {
 
    @RequestMapping("/index")
    public String jumpToIndex(){
        return "index.jsp";
    }
}

注意:这里我把 BookController 上面的路径前缀(/book)注解 @RequestMapping 给去掉了,不然到时候会尝试访问 /book/index.jsp 而不是 /index.jsp,会报错。

b635dde07fd2e2ccd66e8ecfe6126d14_8113dc95d33d40ffa44d53fa148486cb.png

3.2、响应文本

响应文本的时候为了避免 SpringMVC 把我们的响应文本解读为资源路径需要加一个注解:@ResponseBody

@RequestMapping("/text")
@ResponseBody
public String reposeText(){
    return "Hello Spring";
}

运行结果:

877d60e3545e8284d1e514e5c424be70_1e912aa9f0ef4d6bb81068faad738718.png

其实响应文本的本质还是返回一个页面:

    @RequestMapping("/text")
    @ResponseBody
    public String reposeText(){
        return "<h1>Hello Spring</h1>";
    }

测试结果:

b635dde07fd2e2ccd66e8ecfe6126d14_8113dc95d33d40ffa44d53fa148486cb.png

3.3、响应 json 对象

       响应 json 对象很简单,直接返回一个对象即可,我们之前导入的依赖 jackson 会自动帮我们把 Java 对象转为 json:

    @RequestMapping("/jsonPojo")
    @ResponseBody
    public User reposeJsonPojo(){
        return new User("谢永强",25);
    }

测试结果:

23f784f6a2ee3fc336662a1d68d328e2_51dd35c22c744477a533c50afa9143a3.png

3.4、响应 json 对象集合

同样很简单,和响应对象一样,只不过是把对象放进了集合。同样,一定要导入 Jackson 依赖。

    @RequestMapping("/jsonList")
    @ResponseBody
    public List<User> reposeJsonList(){
        List<User> list = new ArrayList<User>();
        list.add(new User("谢永强", 25));
        list.add(new User("王小蒙", 25));
        return list;
    }

测试结果:

b48521938fa33901eef9c172a99eaf72_9dc428fbd0d64d63854dc84bcd70c3ab.png

名称 类型 位置 作用
@ResponseBody 方法注解 控制器方法上方 将当前控制器方法返回值违响应体

       如果该控制器方法返回值是 String 类型的文本,@ResponseBody 会把它转为响应体而不是把该文本当做资源路径;如果是对象类型,则把它转为我们浏览器可识别的数据类型,比如把 Java 对象转为 json。

3.5、类型转换器 HttpMessageConverter

       这里的转换用的是并不是我们前面说的 Converter 接口,而是 HttpMessageConverter 接口,这个接口有一个实现类叫做 MappingJackson2HttpMessageConverter ,所以只要我们导入了 Jackson 包,它就可以帮我们把对象转为 json 格式。

       这也是我之前疑惑的地方:为什么不用 alibaba 的 fastjson 呢,原来是因为人家 SpringMVC 底层用的是 Jackson。

相关文章
|
11天前
|
JSON 前端开发 Java
【JavaEE进阶】 关于Spring MVC 响应
【JavaEE进阶】 关于Spring MVC 响应
17 3
|
3天前
|
JSON 前端开发 数据格式
SpringMVC的数据响应-直接回写json字符串
SpringMVC的数据响应-直接回写json字符串
|
3天前
|
前端开发 Java Spring
|
5天前
|
JSON 前端开发 Java
spring mvc 请求与响应
spring mvc 请求与响应
9 0
|
19天前
|
前端开发 Java 应用服务中间件
SpringMVC(二)【请求与响应】(1)
SpringMVC(二)【请求与响应】
|
8月前
|
JSON 前端开发 Java
构建健壮的Spring MVC应用:JSON响应与异常处理
构建健壮的Spring MVC应用:JSON响应与异常处理
41 0
|
1月前
|
JSON 前端开发 Java
SpringMVC请求和响应
Spring MVC通过请求和响应的处理来实现Web应用程序的开发。请求通过控制器处理,响应通过视图渲染器生成最终的HTML响应,并返回给客户端。
56 4
|
1月前
|
JSON 前端开发 Java
【JavaEE进阶】 关于Spring mvc 响应
【JavaEE进阶】 关于Spring mvc 响应
|
1月前
|
JSON 前端开发 Java
Spring MVC响应结合RESTful风格开发,打造具有强大功能和良好体验的Web应用!
Spring MVC响应结合RESTful风格开发,打造具有强大功能和良好体验的Web应用!
|
1月前
|
存储
SpringMVC的请求和响应
SpringMVC的请求和响应
15 0