SpringMVC入门-注解配置和请求传参和响应数据 1

简介: SpringMVC入门-注解配置和请求传参和响应数据

1 全注解配置SpringMVC

  • 使用注解形式转化SpringMVC核心配置文件为配置类
@Configuration
@ComponentScan(value = "com.itheima",includeFilters =
    @ComponentScan.Filter(type=FilterType.ANNOTATION,classes = {Controller.class})
    )
public class SpringMVCConfiguration implements WebMvcConfigurer{
    //注解配置放行指定资源格式
//    @Override
//    public void addResourceHandlers(ResourceHandlerRegistry registry) {
//        registry.addResourceHandler("/img/**").addResourceLocations("/img/");
//        registry.addResourceHandler("/js/**").addResourceLocations("/js/");
//        registry.addResourceHandler("/css/**").addResourceLocations("/css/");
//    }
    //注解配置通用放行资源的格式
    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        configurer.enable();;
    }
}
  • 基于servlet3.0规范,自定义Servlet容器初始化配置类,加载SpringMVC核心配置类
public class ServletContainersInitConfig extends AbstractDispatcherServletInitializer {
    //创建Servlet容器时,使用注解的方式加载SPRINGMVC配置类中的信息,并加载成WEB专用的                //ApplicationContext对象
    //该对象放入了ServletContext范围,后期在整个WEB容器中可以随时获取调用
    @Override
    protected WebApplicationContext createServletApplicationContext() {
        AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
        ctx.register(SpringMVCConfiguration.class);
        return ctx;
    }
    //注解配置映射地址方式,服务于SpringMVC的核心控制器DispatcherServlet
    @Override
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }
    @Override
    protected WebApplicationContext createRootApplicationContext() {
        return null;
    }
    //乱码处理作为过滤器,在servlet容器启动时进行配置,相关内容参看Servlet零配置相关课程
    @Override
    public void onStartup(ServletContext servletContext) throws ServletException {
        super.onStartup(servletContext);
        CharacterEncodingFilter cef = new CharacterEncodingFilter();
        cef.setEncoding("UTF-8");
        FilterRegistration.Dynamic registration = servletContext.addFilter("characterEncodingFilter", cef);
        registration.addMappingForUrlPatterns(EnumSet.of(DispatcherType.REQUEST,DispatcherType.FORWARD,DispatcherType.INCLUDE),false,"/*");
    }
}

删除web.xml

删除spring-mvc.xml

小节

基于servlet3.0规范,配置Servlet容器初始化配置类,初始化时加载SpringMVC配置类

转化SpringMVC核心配置文件

转化为注解(例如: spring处理器加载过滤)

转化为bean进行加载

按照标准接口进行开发并加载(例如:中文乱码处理、静态资源加载过滤)

2 获取请求数据

2.1 普通类型参数传参

解决tomcat7get请求中文乱码问题

Controller中的业务方法的参数名称要与请求参数的name一致,参数值会自动映射匹配。并且能自动做类型转换;

2.2 POJO类型参数传参

Controller中的业务方法的POJO参数的属性名与请求参数的name一致,参数值会自动映射匹配。

复杂POJO类型参数

当POJO中出现对象属性时,参数名称与对象层次结构名称保持一致

访问URL: http://localhost/requestParam5?address.province=beijing

public class User {
    private String name;
    private Integer age;
    private Address address;
    public Address getAddress() {
        return address;
    }
    public void setAddress(Address address) {
        this.address = address;
    }
    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;
    }
}
@RequestMapping("/requestParam5")
public String requestParam5(User user){
    System.out.println("user.address="+user.getAddress().getProvince());
    return "page.jsp";
}

当POJO中出现List,保存对象数据,参数名称与对象层次结构名称保持一致,使用数组格式描述集

合中对象的位置

访问URL: http://localhost/requestParam7?addresses[0].province=bj&addresses[1].province=tj

public class User {
    private String name;
    private Integer age;
    private List<Address> addresses;
}
public class Address {
    private String province;
    private String city;
    private String address;
}
@RequestMapping("/requestParam7")
public String requestParam7(User user){
    System.out.println("user.addresses="+user.getAddress());
    return "page.jsp";
}

当POJO中出现Map,保存对象数据,参数名称与对象层次结构名称保持一致,使用映射格式描述集合中对象的位置

访问URL: http://localhost/requestParam8?addressMap[’home’].province=bj&addressMap[’job’].province=tj

public class User {
    private String name;
    private Integer age;
    private Map<String,Address> addressMap;
}
public class Address {
    private String province;
    private String city;
    private String address;
}
@RequestMapping("/requestParam8")
public String requestParam8(User user){
    System.out.println("user.addressMap="+user.getAddressMap());
    return "page.jsp";
}

2.3 数组与集合类型参数传参

数组类型参数

Controller中的业务方法数组名称与请求参数的name一致,参数值会自动映射匹配。

集合类型参数

675f7788801dadcc51d14cd02c017f13.png

方式1:


保存简单类型数据,请求参数名与处理器方法形参名保持一致,且请求参数数量> 1个

访问URL: http://localhost/requestParam10?nick=Jockme&nick=zahc

@RequestMapping("/requestParam10")
public String requestParam10(@RequestParam("nick") List<String> nick){
    System.out.println(nick);
    return "page.jsp";
}

注意: SpringMVC默认将List作为对象处理,赋值前先创建对象,然后将nick作为对象的属性进行处理。由于

List是接口,无法创建对象,报无法找到构造方法异常;修复类型为可创建对象的ArrayList类型后,对象可

以创建,但没有nick属性,因此数据为空。此时需要告知SpringMVC的处理器nick是一组数据,而不是一个单

一数据。通过@RequestParam注解,将数量大于1个names参数打包成参数数组后, SpringMVC才能识别该数

据格式,并判定形参类型是否为数组或集合,并按数组或集合对象的形式操作数据。


方式2 一般不用

获得集合参数时,将集合参数包装到一个POJO中

方式3

当使用ajax提交时,可以指定contentType为json形式,那么在方法参数位置使用@RequestBody可以直接接收集合数据而无需使用POJO进行包装


jquery在线地址:https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js

JSON.stringfy()功能是吧任意对象变成JSON格式的字符串contentType表示浏览器告诉服务器发送给服务器的是utf-8编码的JSON格式的数据

2.4 @RequestParam

当请求的参数名称与Controller的业务方法参数名称不一致时,就需要通过@RequestParam注解显示的绑定,除此以为还可以为表单参数设置默认值,比如分页

[]

2.5 类型转换

SpringMVC对接收的数据进行自动类型转换,该工作通过Converter接口实现

]

  • 标量转换器
   StringToBooleanConverter String→Boolean
   ObjectToStringConverter Object→String
   StringToNumberConverterFactory String→Number( Integer、 Long等)
   NumberToNumberConverterFactory Number子类型之间(Integer、 Long、 Double等)
   StringToCharacterConverter String→java.lang.Character
   NumberToCharacterConverter Number子类型(Integer、 Long、 Double等)→java.lang.Character
   CharacterToNumberFactory java.lang.Character→Number子类型(Integer、 Long、 Double等)
   StringToEnumConverterFactory String→enum类型
   EnumToStringConverter enum类型→String
   StringToLocaleConverter String→java.util.Local
   PropertiesToStringConverter java.util.Properties→String
   StringToPropertiesConverter String→java.util.Properties
  • 集合、数组相关转换器
   ArrayToCollectionConverter 数组→集合( List、 Set)
   CollectionToArrayConverter 集合( List、 Set) →数组
   ArrayToArrayConverter 数组间
   CollectionToCollectionConverter 集合间( List、 Set)
   MapToMapConverter Map间
   ArrayToStringConverter 数组→String类型
   StringToArrayConverter String→数组, trim后使用“,”split
   ArrayToObjectConverter 数组→Object
   ObjectToArrayConverter Object→单元素数组
   CollectionToStringConverter 集合( List、 Set) →String
   StringToCollectionConverter String→集合( List、 Set), trim后使用“,”split
   CollectionToObjectConverter 集合→Object
   ObjectToCollectionConverter Object→单元素集合
  • 默认转换器
ObjectToObjectConverter Object间
   IdToEntityConverter Id→Entity
   FallbackObjectToStringConverter Object→String

SpringMVC对接收的数据进行自动类型转换,该工作通过Converter接口实现

目录
相关文章
|
20天前
|
JSON 前端开发 Java
Spring MVC——获取参数和响应
本文介绍了如何在Spring框架中通过不同的注解和方法获取URL参数、上传文件、处理cookie和session、以及响应不同类型的数据。具体内容包括使用`@PathVariable`获取URL中的参数,使用`MultipartFile`上传文件,通过`HttpServletRequest`和`@CookieValue`获取cookie,通过`HttpSession`和`@SessionAttribute`获取session,以及如何返回静态页面、HTML代码片段、JSON数据,并设置HTTP状态码和响应头。
38 1
Spring MVC——获取参数和响应
|
20天前
|
设计模式 前端开发 Java
Spring MVC——项目创建和建立请求连接
MVC是一种软件架构设计模式,将应用分为模型、视图和控制器三部分。Spring MVC是基于MVC模式的Web框架,通过`@RequestMapping`等注解实现URL路由映射,支持GET和POST请求,并可传递参数。创建Spring MVC项目与Spring Boot类似,使用`@RestController`注解标记控制器类。
30 1
Spring MVC——项目创建和建立请求连接
|
23天前
|
JSON 前端开发 Java
SSM:SpringMVC
本文介绍了SpringMVC的依赖配置、请求参数处理、注解开发、JSON处理、拦截器、文件上传下载以及相关注意事项。首先,需要在`pom.xml`中添加必要的依赖,包括Servlet、JSTL、Spring Web MVC等。接着,在`web.xml`中配置DispatcherServlet,并设置Spring MVC的相关配置,如组件扫描、默认Servlet处理器等。然后,通过`@RequestMapping`等注解处理请求参数,使用`@ResponseBody`返回JSON数据。此外,还介绍了如何创建和配置拦截器、文件上传下载的功能,并强调了JSP文件的放置位置,避免404错误。
|
30天前
|
前端开发 Java 应用服务中间件
【Spring】Spring MVC的项目准备和连接建立
【Spring】Spring MVC的项目准备和连接建立
51 2
|
2月前
|
缓存 前端开发 Java
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
Soring Boot的起步依赖、启动流程、自动装配、常用的注解、Spring MVC的执行流程、对MVC的理解、RestFull风格、为什么service层要写接口、MyBatis的缓存机制、$和#有什么区别、resultType和resultMap区别、cookie和session的区别是什么?session的工作原理
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
|
1月前
|
XML 前端开发 Java
Spring,SpringBoot和SpringMVC的关系以及区别 —— 超准确,可当面试题!!!也可供零基础学习
本文阐述了Spring、Spring Boot和Spring MVC的关系与区别,指出Spring是一个轻量级、一站式、模块化的应用程序开发框架,Spring MVC是Spring的一个子框架,专注于Web应用和网络接口开发,而Spring Boot则是对Spring的封装,用于简化Spring应用的开发。
86 0
Spring,SpringBoot和SpringMVC的关系以及区别 —— 超准确,可当面试题!!!也可供零基础学习
|
1月前
|
前端开发 Java
学习SpringMVC,建立连接,请求,响应 SpringBoot初学,如何前后端交互(后端版)?最简单的能通过网址访问的后端服务器代码举例
文章介绍了如何使用SpringBoot创建简单的后端服务器来处理HTTP请求,包括建立连接、编写Controller处理请求,并返回响应给前端或网址。
50 0
学习SpringMVC,建立连接,请求,响应 SpringBoot初学,如何前后端交互(后端版)?最简单的能通过网址访问的后端服务器代码举例
|
2月前
|
XML 缓存 前端开发
springMVC02,restful风格,请求转发和重定向
文章介绍了RESTful风格的基本概念和特点,并展示了如何使用SpringMVC实现RESTful风格的请求处理。同时,文章还讨论了SpringMVC中的请求转发和重定向的实现方式,并通过具体代码示例进行了说明。
springMVC02,restful风格,请求转发和重定向
|
2月前
|
前端开发 Java Spring
关于spring mvc 的 addPathPatterns 拦截配置常见问题
关于spring mvc 的 addPathPatterns 拦截配置常见问题
193 1
|
3月前
|
Java 数据库连接 Spring
后端框架入门超详细 三部曲 Spring 、SpringMVC、Mybatis、SSM框架整合案例 【爆肝整理五万字】
文章是关于Spring、SpringMVC、Mybatis三个后端框架的超详细入门教程,包括基础知识讲解、代码案例及SSM框架整合的实战应用,旨在帮助读者全面理解并掌握这些框架的使用。
后端框架入门超详细 三部曲 Spring 、SpringMVC、Mybatis、SSM框架整合案例 【爆肝整理五万字】