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接口实现

目录
相关文章
|
10天前
|
设计模式 前端开发 Java
步步深入SpringMvc DispatcherServlet源码掌握springmvc全流程原理
通过对 `DispatcherServlet`源码的深入剖析,我们了解了SpringMVC请求处理的全流程。`DispatcherServlet`作为前端控制器,负责请求的接收和分发,处理器映射和适配负责将请求分派到具体的处理器方法,视图解析器负责生成和渲染视图。理解这些核心组件及其交互原理,有助于开发者更好地使用和扩展SpringMVC框架。
24 4
|
28天前
|
前端开发 Java Spring
Spring MVC核心:深入理解@RequestMapping注解
在Spring MVC框架中,`@RequestMapping`注解是实现请求映射的核心,它将HTTP请求映射到控制器的处理方法上。本文将深入探讨`@RequestMapping`注解的各个方面,包括其注解的使用方法、如何与Spring MVC的其他组件协同工作,以及在实际开发中的应用案例。
42 4
|
28天前
|
前端开发 Java 开发者
Spring MVC中的请求映射:@RequestMapping注解深度解析
在Spring MVC框架中,`@RequestMapping`注解是实现请求映射的关键,它将HTTP请求映射到相应的处理器方法上。本文将深入探讨`@RequestMapping`注解的工作原理、使用方法以及最佳实践,为开发者提供一份详尽的技术干货。
108 2
|
28天前
|
前端开发 Java Spring
探索Spring MVC:@Controller注解的全面解析
在Spring MVC框架中,`@Controller`注解是构建Web应用程序的基石之一。它不仅简化了控制器的定义,还提供了一种优雅的方式来处理HTTP请求。本文将全面解析`@Controller`注解,包括其定义、用法、以及在Spring MVC中的作用。
47 2
|
2月前
|
JSON 前端开发 Java
Spring MVC——获取参数和响应
本文介绍了如何在Spring框架中通过不同的注解和方法获取URL参数、上传文件、处理cookie和session、以及响应不同类型的数据。具体内容包括使用`@PathVariable`获取URL中的参数,使用`MultipartFile`上传文件,通过`HttpServletRequest`和`@CookieValue`获取cookie,通过`HttpSession`和`@SessionAttribute`获取session,以及如何返回静态页面、HTML代码片段、JSON数据,并设置HTTP状态码和响应头。
69 1
Spring MVC——获取参数和响应
|
28天前
|
前端开发 Java 开发者
Spring MVC中的控制器:@Controller注解全解析
在Spring MVC框架中,`@Controller`注解是构建Web应用程序控制层的核心。它不仅简化了控制器的定义,还提供了灵活的请求映射和处理机制。本文将深入探讨`@Controller`注解的用法、特点以及在实际开发中的应用。
75 0
|
7月前
|
设计模式 前端开发 JavaScript
Spring MVC(一)【什么是Spring MVC】
Spring MVC(一)【什么是Spring MVC】
|
6月前
|
设计模式 前端开发 Java
【Spring MVC】快速学习使用Spring MVC的注解及三层架构
【Spring MVC】快速学习使用Spring MVC的注解及三层架构
108 1
|
6月前
|
前端开发 Java 应用服务中间件
Spring框架第六章(SpringMVC概括及基于JDK21与Tomcat10创建SpringMVC程序)
Spring框架第六章(SpringMVC概括及基于JDK21与Tomcat10创建SpringMVC程序)
|
7月前
|
前端开发 Java 关系型数据库
基于ssm框架旅游网旅游社交平台前后台管理系统(spring+springmvc+mybatis+maven+tomcat+html)
基于ssm框架旅游网旅游社交平台前后台管理系统(spring+springmvc+mybatis+maven+tomcat+html)