SpringMVC学习笔记(三)请求与响应

请求参数

1.普通参数

post和get请求参数直接写在函数方法里就可以,但是要注意参数名称必须和url中的参数名称对应起来

若参数名称不对应,则需要加注解

 @RequestMapping("/commonParam")
 @ResponseBody
 public String commonParam(@RequestParam("username") String name){
     System.out.println(name);
     return "{'module':'common param'}";
 }
2.POJO类型参数

直接在请求里写属性值,传到后端时框架会自动将其打包成一个符合参数要求的对象

3.嵌套POJO类型参数

对象….对象.属性

4.数组类型参数

直接传,写多个同名参数即可,后端会自动转为数组类型 eg.String[] hobbies

5.集合类型参数⭐

添加@RequestParam参数注解,避免框架错把集合类型解析为POJO类型

日期类型参数

框架可以自动解析,也使用@DateFormat注解转换格式:

 @RequestMapping("/dataParam")
 @ResponseBody
 public String dataParam(Date date,@DataFormat(pattern="yyyy-MM-dd")Date date1,@DataFormat(pattern="yyyy/MM/dd HH:mm:ss")Date date2){
     return "{'module':'data param'}";
 }

中文乱码

1.配置文件中添加过滤器

 //处理中文乱码问题
 @Override
 protected Filter[] getServletFilters() {
     CharacterEncodingFilter filter = new CharacterEncodingFilter();
     filter.setEncoding("UTF-8");
     return new Filter[]{filter};
 }

2.pom中设置tomcat编码解码方式,即<uriEncoding>UTF-8</uriEncoding>

 <build>
     <plugins>
       <plugin>
      <groupId>org.apache.tomcat.maven</groupId>
         <artifactId>tomcat7-maven-plugin</artifactId>
         <version>2.1</version>
         <configuration>
           <port>80</port>
           <path>/</path>
           <uriEncoding>UTF-8</uriEncoding>
         </configuration>
       </plugin>
     </plugins>
   </build>

JSON

1.导入json解析依赖

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

2.开启json转为对象功能,使用注解@EnableWebMvc

 @Configuration
 @ComponentScan("com.yuan.controller")
 @EnableWebMvc
 public class SpringMvcConfig {
 }

3.参数前添加@RequestBody注解(因为json是requestbody的内容)

 @RequestMapping("/listParamForJson")
 @ResponseBody
 public String listParamForJson(@RequestBody List<String> likes){
     System.out.println(likes);
     return "{'module':'list param for json'}";
 }

响应

添加解析json的依赖

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

灵活使用@ResponseBody注解,设置当前控制器返回值作为响应体

转换过程使用的是HttpMessageConverter接口:

image-20230312110737234

image-20230312110855797

注意⭐

为什么可以实现自动类型转换?

  • 前端传递字符串,后端使用日期Date接收
  • 前端传递JSON数据,后端使用对象接收

SpringMVC中提供了很多类型转换接口和实现类

在框架中,有一些类型转换接口,其中有:

  • (1) Converter接口
 /**
 *   S: the source type
 *   T: the target type
 */
 public interface Converter<S, T> {
     @Nullable
     //该方法就是将从页面上接收的数据(S)转换成我们想要的数据类型(T)返回
     T convert(S source);
 }

注意:Converter所属的包为org.springframework.core.convert.converter

Converter接口的实现类

1630496385398

框架中有提供很多对应Converter接口的实现类,用来实现不同数据类型之间的转换

  • (2) HttpMessageConverter接口

该接口是实现对象与JSON之间的转换工作

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注