当前位置: 首页 > article >正文

Spring MVC实战指南:构建高效Web应用的架构与技巧(二)

自定义类型转换器(2种方式)

注解

Date类型 :Date birthday,数据输入的默认形式为2024/02/01,用.或者-都不行。

通过以下方式来改变:日期的写入形式

实体类中: @DateTimeFormat(pattern="yy-MM-dd HH:ss:mm")

配置文件(springmvc文件)中:让映射器生效

绑定格式后必须按格式写,默认的格式就不能使用了。

实现converter的接口

将spring转换成Date

​ * 自定义类型转换器 把String转换成Date
 */
public class StringToDate implements Converter<String,Date>{
​
    /**
     * 进行类型转换的方法
     * @param s     用户输入的内容
     * @return
     */
    @Override
    public Date convert(String s) {
        // 判断
        if(s == null){
            throw new RuntimeException("请输入内容");
        }
        // 进行转换
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        try {
            // 进行转换
            return sdf.parse(s);
        } catch (ParseException e) {
            throw new RuntimeException(e);
        }
    }

 2.注册自定义类型转换器,在springmvc.xml文件中编写配置

 <!--配置日期类型转换器,类型转换器的组件,把日期类型转换注入到组件对象中-->
    <bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
        <property name="converters">
            <set>
                <bean class="com.qcbyjy.demo2.StringToDate" />
            </set>
        </property>
    </bean>
​
    <!--让映射器生效(默认不配置也是可以的)-->
    <mvc:annotation-driven conversion-service="conversionService"/>

在控制器中使用原生的ServletAPI对象

只需要在控制器的方法参数定义HttpServletRequest和HttpServletResponse对象

     /**     * 原生的API     
     * @return    
     */    
     @RequestMapping("/save6.do")   
      public String save6(HttpServletRequest request, HttpServletResponse response){    
             System.out.println(request);        // 获取到HttpSession对象       
              HttpSession session = request.getSession();        
              System.out.println(session);        
              System.out.println(response);        
              return "suc";    
              }​

常用注解(5个)

@controller、@rescontroller

RequestParam注解

  • 作用:把请求中的指定名称的参数传递给控制器中的形参赋值
  • 属性:
value:请求参数中的名称
required:请求参数中是否必须提供此参数,默认值是true,必须提供
defaultValue:defaultValue = "abc"
如果不要求必须传请求参数,使用默认值defaultValue;如果要求必须传参数,就不用使用defaultValue
如果必须传值,就不用设置
  • 代码:
  /**
     * RequestParam注解
     * required = false ,默认值是true,必须要传请求参数,不传就会报错
     * defaultValue = "abc" 如果没有传请求参数,使用默认值
     * @return
     */
    @RequestMapping("/save1.do")
    public String save(@RequestParam(value = "username",required = false,defaultValue = "abc") String name){
        System.out.println("姓名:"+name);
        return "suc";
    }

前端使用的是username。required默认值是true,一旦使用了RequestParam,这个方法的参数就必须赋值。

RequestBody注解

  • 作用:用于获取请求体的内容(注意:get方法不可以),一般用于post请求
  • 属性:
required:是否必须有请求体,默认值是true
  • 代码:
 @RequestMapping("/save2.do")
    public String save2(@RequestBody String body){
        System.out.println("请求体内容:"+body);
        return "suc";
    }
    

获取整个表单的数据:

如username=asdfghj,前端页面是一个username的输入框

PathVaribale注解

  • 作用:拥有绑定url中的占位符的。例如:url中有/delete/{id},{id}就是占位符
  • 属性:
        value:指定url中的占位符名称
        Restful风格的URL
                请求路径一样,可以根据不同的请求方式去执行后台的不同方法
                result风格的URL优点:结构清晰、符合标准、易于理解、扩展方便
  • 代码:
@RequestMapping(path = "/emp/{id}",method = RequestMethod.GET)
    public String findById(@PathVariable(value = "id") Integer id){
        System.out.println("通过id查询员工..."+id);
        return "suc";
    }
    以下这两种写法是一致的:

浏览器上的输入地址的形式

  • 修改前端控制器的配置文件
 <!--配置前端控制器-->
  <servlet>
    <servlet-name>dispatcherServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!--加载springmvc.xml配置文件,配置的是Spring配置-->
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:springmvc.xml</param-value>
    </init-param>
    <!--配置启动加载-->
    <load-on-startup>1</load-on-startup>
  </servlet>
  <!--
  <servlet-mapping>
    <servlet-name>dispatcherServlet</servlet-name>
    <url-pattern>*.do</url-pattern>
  </servlet-mapping>
  -->
  <servlet-mapping>
    <servlet-name>dispatcherServlet</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>

RequestHeader注解

  • 作用:获取指定请求头的值
  • 属性:value:请求头的名称
  • 代码:
 /**
     * RequestHeader 获取请求头的值
     * @return
     */
    @RequestMapping("/save3.do")
    public String save3(@RequestHeader(value = "Accept") String header){
        System.out.println("Accept请求头的值:"+header);
        return "suc";
    }

CookieValue注解

  • 作用:用于获取指定cookie的名称的值
  • 属性:value:cookie的名称
  • 代码:
    /**
     * CookieValue 获取到cookie中的值
     * @return
     */
    @RequestMapping("/save4.do")
    public String save4(@CookieValue(value = "JSESSIONID") String cookie){
        System.out.println("值:"+cookie);
        return "suc";
    }


http://www.kler.cn/a/468582.html

相关文章:

  • unity学习8:unity的基础操作 和对应shortcut
  • 分布式多机多卡训练全景指南:MPI、DeepSpeed 与 Colossal-AI 深度解析
  • 权限掩码umask
  • TPS和QPS的区别
  • Hello 2025
  • Java jni调用nnom rnn-denoise 降噪
  • JMeter线程组Duration和循环次数设置冲突后,Duration优先级高
  • 代码随想录 day55 第十一章 图论part05
  • 数据结构之双链表(超详解)
  • 【intro】BLEU
  • 圆周率的广泛应用
  • vscode如何离线安装插件
  • 深度学习YOLOv3压双黄线期末项目
  • 7-10 逆序对
  • ArkTS更简洁
  • 贝叶斯算法详解:用概率思维解决分类难题
  • 如何提高软件研发效率?
  • 0042.大学校园生活信息平台+论文
  • 2.1.8 epoll的实现原理
  • 流程图(三)利用python绘制桑基图
  • 指代消解:自然语言处理中的核心任务与技术进展
  • 使用 LangChain 构建聊天机器人:从基础到实战
  • 跨平台游戏引擎 Axmol-2.3.0 发布
  • STM32-笔记37-吸烟室管控系统项目
  • 国产编辑器EverEdit - 使用技巧:变量重命名的一种简单替代方法
  • Memcached prepend 命令