写点什么

SpringMVC-- 请求参数绑定,spring 菜鸟教程

用户头像
极客good
关注
发布于: 刚刚

public class DataType implements Serializable{


private Date date;


public Date getDate() {


return date;


}


public void setDate(Date date) {


this.date = date;


}


@Override


public String toString() {


return "date=" + date;


}


}


在 JSP 页面中添加表单,并在表单中传输 2020-10-10 格式的日期数据


<%--自定义类型转换器--%>


<form action="param/saveDate" method="post">


日期:<input type="text" name="date">


<input type="submit" value="提交">


</form>


执行测试代码:


/**


  • 自定义类型转换器

  • @param dateType

  • @return


*/


@RequestMapping("/deleteDate")


public String deleteDate(DateType date){


System.out.println("执行了...");


System.out.println(date);


return "success";


}


上边代码执行过后会发现报错,因为 SpringMVC 不能解析这个数据,这时需要我们自定义类型转换器:


  • 第一步:定义一个类,实现 Converter 接口


public class StringToDateConverter implements Converter<String, Date> {


@Override


public Date convert(String source) {


//判断


if(source==null){


throw new RuntimeException("请您传入数据");


}


DateFormat df=new SimpleDateFormat("yyy-MM-dd");


try{


//把字符串转换为日期


return df.parse(source);


}catch (Exception e){


throw new RuntimeException("数据类型转换出现错误");


}


}


}


  • 第二步:在 spring 配置文件中配置类型转换器,spring 配置类型转换器的机制是,将自定义的转换器注册到类型转换服务中去。


<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">


<property name="converters">


<set>


<bean class="com.ly.utils.StringToDateConverter"></bean>


</set>


</property>


</bean>


  • 第三步:在 annotation-driven 标签中引用配置的类型转换服务


<mvc:annotation-driven conversion-service="converterService"></mvc:annotation-driven>


这样就是先自定义类型转换了。


使用 ServletAPI 对象作为方法参数


SpringMVC 还支持使用原始 ServletAPI 对象作为控制器方法的参数。支持原始 ServletAPI 对象有:HttpServletRequest 、HttpServletResponse、HttpSession…我们可以把这些对象,直接写在控制的方法参数中使用,在控制器中使用原生的 ServletAPI 对象,只需要在控制器的方法参数定义对应对象即可。


<a href="account/testServletAPI">测试访问 ServletAPI</a>


控制器中的代码:


/**


  • 测试访问 testServletAPI


*/


@RequestMapping("/testServletAPI")


public String testServletAPI(HttpServletRequest request,HttpServletResponse response,HttpSession session) {


System.out.println(request);


System.out.println(response);


System.out.println(session);


return "success";


}


REST 风格 URL




REST(英文:Representational State Transfer,简称 REST)描述了一个架构样式的网络系统,比如 web 应用程序。它首次出现在 2000 年 Roy Fielding 的博士论文中,他是 HTTP 规范的主要编写者之一。在目前主流的三种 Web 服务交互方案中,REST 相比于 SOAP(Simple Object Access protocol,简单对象访问协议)以及 XML-RPC 更加简单明了,无论是对 URL 的处理还是对 Payload 的编码,REST 都倾向于用更加简单轻量的方法设计和实现。值得注意的是 REST 并没有一个明确的标准,而更像是一种设计的风格,它本身并没有什么实用性,其核心价值在于如何设计出符合 REST 风格的网络接口。


优点:结构清晰、符合标准、易于理解、扩展方便,所以正得到越来越多网站的采用。


特性:


  • 资源(Resources):网络上的一个实体,或者说是网络上的一个具体信息,它可以是一段文本、一张图片、一首歌曲、一种服务,总之就是一个具体的存在。可以用一个 URI(统一资源定位符)指向它,每种资源对应一个特定的 URI 。要获取这个资源,访问它的 URI 就可以,因此 URI 即为每一个资源的独一无二的识别符。 表现层(Representation):把资源具体呈现出来的形式,叫做它的表现层 (Representation)。比如,文本可以用 txt 格式表现,也可以用 HTML 格式、XML 格式、JSON 格式表现,甚至可以采用二进制格式。

  • 状态转化(State Transfer):每发出一个请求,就代表了客户端和服务器的一次交互过程。


HTTP 协议,是一个无状态协议,即所有的状态都保存在服务器端。因此,如果客户端想要操作服务器,必须通过某种手段,让服务器端发生“状态转化”(State Transfer)。而这种转化是建立在表现层之上的,所以就是 “表现层状态转化”。具体说,就是 HTTP 协议里面,四个表示操作方式的动词:GET 、POST 、PUT、DELETE。它们分别对应四种基本操作:GET 用来获取资源,POST 用来新建资源,PUT 用来更新资源,DELETE 用来删除资源。


基于 HiddentHttpMethodFilter 的示例


由于浏览器 form 表单只支持 GET 与 POST 请求,而 DELETE、PUT 等 method 并不支持,Spring3.0 添加了一个过滤器,可以将浏览器请求改为指定的请求方式,发送给我们的控制器方法,使得支持 GET、POST、PUT 与 DELETE 请求。


使用方法:


  • 第一步:在 web.xml 中配置该过滤器。

  • 第二步:请求方式必须使用 post 请求。

  • 第三步:按照要求提供_method 请求参数,该参数的取值就是我们需要的请求方式。


源码分析:


jsp 中示例代码:


<form action="springmvc/testRestPOST" method="post">


用户名称:<input type="text" name="username"><br/>


<input type="submit" value="保存">


</form> <hr/>


<form action="springmvc/testRestPUT/1" method="post">


用户名称:<input type="text" name="username"><br/>


<input type="hidden" name="_method" value="PUT">


<input type="submit" value="更新">


</form>


<hr/>


<form action="springmvc/testRestDELETE/1" method="post">


<input type="hidden" name="_method" value="DELETE">


<input type="submit" value="删除">


</form> <hr/>


<form action="springmvc/testRestGET/1" method="post">


<input type="hidden" name="_method" value="GET">


<input type="submit" value="查询">


</form>


控制器中示例代码:


/**


  • post 请求:保存

  • @param username

  • @return


*/


@RequestMapping(value="/testRestPOST",method=RequestMethod.POST)


public String testRestfulURLPOST(User user){


System.out.println("rest post"+user);


return "success";


}


/**


  • put 请求:更新

  • @param username

  • @return


*/


@RequestMapping(value="/testRestPUT/{id}",method=RequestMethod.PUT)


public String testRestfulURLPUT(@PathVariable("id")Integer id,User user){


System.out.println("rest put "+id+","+user);


return "success";


}


/**


  • post 请求:删除

  • @param username

  • @return


*/


@RequestMapping(value="/testRestDELETE/{id}",method=RequestMethod.DELETE)


public String testRestfulURLDELETE(@PathVariable("id")Integer id){


System.out.println("rest


【一线大厂Java面试题解析+核心总结学习笔记+最新架构讲解视频+实战项目源码讲义】
浏览器打开:qq.cn.hn/FTf 免费领取
复制代码


delete "+id);


return "success";


}


/**


  • post 请求:查询

  • @param username

  • @return


*/


@RequestMapping(value="/testRestGET/{id}",method=RequestMethod.GET)


public String testRestfulURLGET(@PathVariable("id")Integer id){


System.out.println("rest get "+id);


return "success";


}

用户头像

极客good

关注

还未添加个人签名 2021.03.18 加入

还未添加个人简介

评论

发布
暂无评论
SpringMVC--请求参数绑定,spring菜鸟教程