前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spring Web MVC 请求消息

Spring Web MVC 请求消息

作者头像
Demo_Null
发布2020-09-28 12:19:03
8350
发布2020-09-28 12:19:03
举报
文章被收录于专栏:Java 学习Java 学习

1.1 请求映射

1.1.1 概述

@RequestMapping 注解用于将请求映射到控制器方法上。它具有通过 URL、HTTP 方法、请求参数、头和媒体类型进行匹配的各种属性。它可以在类级使用来表示共享映射,或者在方法级使用,以缩小到特定的端点映射。@RequestMapping 还有一些基于特定 HTTP 方法的快捷方式变体,包括 @GetMapping@PostMapping@PutMapping@DeleteMapping@PatchMapping。但是在类级别仍需要 @RequestMapping 来表示共享映射。

1.1.2 示例

代码语言:javascript
复制
/**
 * Created with IntelliJ IDEA.
 *
 * @author Demo_Null
 * @date 2020/8/26
 * @description 控制器
 */
@Controller
@RequestMapping("/demo")
public class DemoController {
    
    @GetMapping("/get")
    public void get() {
        System.out.println("get~~~~");
    }

    @PostMapping("/post")
    public void post() {
        System.out.println("get~~~~");
    }
}

1.2 请求参数

1.2.1 概述

  我们在 Servlet 中是自动传入 HttpServletRequest 然后从 request 中获取请求参数。在 Spring Web MVC 中有更加强大的功能,参数可以是基本类型、POJO 类型、数组类型、集合类型,Spring Web MVC 会自动将前端传入的参数转换为对应类型。但是要注意前端传入的名称要与后端接收的名称一致才会自动映射匹配,并自动做类型转换。

1.2.2 字符串类型

代码语言:javascript
复制
/**
 * Created with IntelliJ IDEA.
 *
 * @author Demo_Null
 * @date 2020/8/26
 * @description 字符串类型参数
 */
@Controller
@RequestMapping("/demo")
public class DemoController {

    @GetMapping("/get")
    public void get(String str) {
        System.out.println(str);
    }
}
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.2.3 POJO 类型

代码语言:javascript
复制
/**
 * Created with IntelliJ IDEA.
 *
 * @author Demo_Null
 * @date 2020/8/26
 * @description POJO 类型参数
 */
@Controller
@RequestMapping("/demo")
public class DemoController {

    @GetMapping("/get")
    public void get(Student student) {
        System.out.println(student);
    }
}
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  哎?怎么没有将参数封装到 POJO 呢?这是因为 Spring Web MVC 会将与 POJO 成员变量同名的参数映射进去,但是我们传参是写的是 student.name 他会将其映射到 POJO 中 student 对象的成员变量 name 中,但是 POJO 中没有 student 所以映射失败。

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

1.2.4 数组类型

代码语言:javascript
复制
/**
 * Created with IntelliJ IDEA.
 *
 * @author Demo_Null
 * @date 2020/8/26
 * @description 数组类型参数
 */
@Controller
@RequestMapping("/demo")
public class DemoController {

    @GetMapping("/get")
    public void get(String[] strs) {
        System.out.println(Arrays.asList(strs));
    }
}
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.2.5 集合类型

  获得集合参数时,要么将集合参数包装到一个 POJO 中作为成员变量,用该 POJO 作为参数,然后取出集合;要么提交时,指定 contentType 为 json 形式,那么在方法参数位置使用 @RequestBody 可以直接接收集合数据而无需使用 POJO 进行包装。

代码语言:javascript
复制
/**
 * Created with IntelliJ IDEA.
 *
 * @author Demo_Null
 * @date 2020/8/26
 * @description 集合类型参数
 */
@Controller
@RequestMapping("/demo")
public class DemoController {

    @PostMapping("/post")
    public void post(@RequestBody ArrayList<Student> students) {
        System.out.println(students);
    }
}

1.3 RESTful

1.3.1 概述

  RESTful 是一种网络应用程序的设计风格和开发方式,基于 HTTP,可以使用 XML 格式定义或 JSON 格式定义。RESTful 适用于移动互联网厂商作为业务使能接口的场景,实现第三方 OTT 调用移动网络资源的功能,动作类型为新增、变更、删除所调用资源。

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

1.3.2 特点

 ♞ 每一个 URI 代表 1 种资源;  ♞ 通过操作资源的表现形式来操作资源;  ♞ 资源的表现形式是 XML 或者 HTML;  ♞ 客户端与服务端之间的交互在请求之间是无状态的,从客户端到服务端的请求都必须包含理解请求所必需的信息。  ♞ 客户端使用 GET、POST、PUT、DELETE 4 个表示操作方式的动词对服务端资源进行操作: GET 用来获取资源,POST 用来新建资源(也可以用于更新资源),PUT 用来更新资源,DELETE 用来删除资源;

1.3.3 示例

代码语言:javascript
复制
/**
 * Created with IntelliJ IDEA.
 *
 * @author Demo_Null
 * @date 2020/8/26
 * @description RESTful
 */
@Controller
@RequestMapping("/demo")
public class DemoController {

    @GetMapping("/get/{id}")
    public void get(@PathVariable("id") String id) {}

    @PostMapping("/post/{id}")
    public void post(@PathVariable("id") String id) {}

    @PutMapping("/put/{id}")
    public void put(@PathVariable("id") String id) {}

    @DeleteMapping("/del/{id}")
    public void del(@PathVariable("id") String id) {}
}

1.4 其他

1.4.1 静态资源访问

  当有静态资源需要加载时,比如 js 文件,通过谷歌开发者工具抓包发现,没有加载到 js 文件,原因是 Spring Web MVC 的前端控制器 DispatcherServlet 的 url-pattern 配置的是 /,代表对所有的资源都进行拦截操作,我们需要在 spring-mvc.xml 中通过配置指定放行静态资源。

代码语言:javascript
复制
<!-- 手动放行静态资源 -->
<mvc:resources mapping="/js/**" location="/js/" />
<mvc:resources mapping="/img/**" location="/img/ "/>

<!-- 交由 Spring Web MVC 处理 -->
<mvc:default-servlet-handler/>

1.4.2 乱码过滤器

  当进行 POST 请求的时候,可能由于使用的字符编码不一样导致中文乱码,我们可以在 web.xml 中通过过滤器统一设置字符编码。

代码语言:javascript
复制
<!-- 配置全局过滤的 filter -->
<filter>
    <filter-name>CharacterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>CharacterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

1.4.3 自定义类型转换器

  Spring Web MVC 默认已经提供了一些常用的类型转换器,例如客户端提交的字符串转换成 int 型进行参数设置。但是不是所有的数据类型都提供了转换器,没有提供的就需要自定义转换器,例如:日期类型的数据就需要自定义转换器。自定义类型转换器需要实现 Converter 接口并指定转换类型。

代码语言:javascript
复制
public class StringToDateConverter implements Converter<String, Date> {
    public Date convert(String dateStr) {
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        Date date = null;
        try {
            date = format.parse(dateStr);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return date;
    }
}
代码语言:javascript
复制
<!-- 注册自定义类型转换器 -->
<bean id="conversionService"
 class="org.springframework.context.support.ConversionServiceFactoryBean">
	<property name="converters">
		<set>
			<bean class="com.software.utils.StringToDateConverter"/>
		</set>
	</property>
</bean>
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-08-26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.1 请求映射
    • 1.1.1 概述
      • 1.1.2 示例
      • 1.2 请求参数
        • 1.2.1 概述
          • 1.2.2 字符串类型
            • 1.2.3 POJO 类型
              • 1.2.4 数组类型
                • 1.2.5 集合类型
                • 1.3 RESTful
                  • 1.3.1 概述
                    • 1.3.2 特点
                      • 1.3.3 示例
                      • 1.4 其他
                        • 1.4.1 静态资源访问
                          • 1.4.2 乱码过滤器
                            • 1.4.3 自定义类型转换器
                            相关产品与服务
                            云开发 CLI 工具
                            云开发 CLI 工具(Cloudbase CLI Devtools,CCLID)是云开发官方指定的 CLI 工具,可以帮助开发者快速构建 Serverless 应用。CLI 工具提供能力包括文件储存的管理、云函数的部署、模板项目的创建、HTTP Service、静态网站托管等,您可以专注于编码,无需在平台中切换各类配置。
                            领券
                            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档