【framework】spring3-mvc实例-信息转换

简介:

前言

这次主要讲讲 消息转换:一次请求,从请求页面--后台数据处理--返回响应内容.

主要涉及以下几个部分

请求Content-Type:

 1. text/plain
 2. application/json
 3. application/xml
 4. application/x-www-form-urlencoded

 请求正文:(都可以理解为string) 

 1. 普通string 
 2. json格式
 3. xml格式
Controller接收  

 1. String
 2. Bean
响应Content-Type:

 1. text/plain 
 2. application/x-www-form-urlencoded
 3. application/application+xml

相关流程和转换原理,单独开一篇博文写. 

具体实例

我们讲解的项目是spring-mvc-showcase,如果你有疑问可以参考spring3-mvc的开篇。

该java文件
在包(pkg):  org.springframework.samples.mvc.messageconverters
类名为: MessageConvertersController 


 我抽取部分代码进行讲解

1.   最简单的string请求和响应

第一部分:java代码


  
  
  1. @RequestMapping(value="/string"method=RequestMethod.POST)   
  2.     public @ResponseBody String readString(@RequestBody String string) {   
  3.         return "Read string '" + string + "'";   
  4.     }  

这个方法需要注意的展开讲一下,其他大同小异

第二部分:jsp页面

html


  
  
  1. <form id="readString" class="textForm" action="<c:url value="/messageconverters/string" />method="post">   
  2.       <input id="readStringSubmit" type="submit" value="Read a String" />   
  3. </form> 

js(在js中,对submit时间做了重写)


  
  
  1. $("form.textForm").submit(function(event) {   
  2.         var form = $(this);   
  3.         var button = form.children(":first");   
  4.         $.ajax({ type: "POST", url: form.attr("action"), data: "foo", contentType: "text/plain", dataType: "text", success: function(text) { MvcUtil.showSuccessResponse(text, button); }, error: function(xhr) { MvcUtil.showErrorResponse(xhr.responseText, button); }});   
  5.         return false;   
  6.     });  
  7. 注意:js用到了jquery,所以语法,并且在jsp中做了一定的封装如MvcUtil。

第三部分: 通过jsp发起请求,查看请求信息

Magical Snap - 2012.08.31 23.09 - 001

请求正文:

Magical Snap - 2012.08.31 23.14 - 004

由于注解@RequestBody 存在,String直接被获取,返回值应为Read string 'foo'(上一篇文章我们讲过@ResponseBody )

第四部分: 效果图

Magical Snap - 2012.08.31 23.13 - 003

 2. 从请求中数据,转换成bean,作为参数传入,再以bean作为返回值


  
  
  1. @RequestMapping(value="/form"method=RequestMethod.POST)   
  2.     public @ResponseBody String readForm(@ModelAttribute JavaBean bean) {   
  3.         return "Read x-www-form-urlencoded: " + bean;   
  4.     } 

3. map作为返回值


  
  
  1. @RequestMapping(value="/form"method=RequestMethod.GET)   
  2.     public @ResponseBody MultiValueMap<String, String> writeForm() {   
  3.         MultiValueMap<String, String> map = new LinkedMultiValueMap<String, String>();   
  4.         map.add("foo", "bar");   
  5.         map.add("fruit", "apple");   
  6.         return map;   
  7.     }  
  8.  
  9. //注意:返回类型MultiValueMap  

4. 响应一个bean


  
  
  1. @RequestMapping(value="/xml"method=RequestMethod.GET)   
  2.     public @ResponseBody JavaBean writeXml() {   
  3.         return new JavaBean("bar", "fruit");   
  4.     }  
  5.  
  6. //注意:返回类型JavaBean  

几个注解

1. @RequestBody 

表示method的参数能够从HTTP请求的body中取得值

2. @ModelAttribute

(我给这个注解加了个红色,就是说,这个注解有点复杂,但别有压力)

@ModelAttribute可以用于方法或者方法参数

     2.1 @ModelAttribute用于方法(method)

一个@ModelAttribute用于方法之上表示这个方法增加一个或者多个model属性,这些方法支持同样的参数类型,但不能直接映射到请求上。所有的@ModelAttribute方法在@RequestMapping的方法之前被调用

     2.2 @ModelAttribute用于method参数

表示这个参数能够从model中检索出来如果不存在与model里,这个参数首次实例化并且加入到model中。一旦存在于model中,这个参数字段会被填充,名字与绑定的请求参数中对应。例如本例中可能Bean有字段foo,则能够填充model

3. @Valid

@Valid注解不是spring的注解,所以需要加入如下配置:


  
  
  1. <mvc:annotation-driven/> 

@Valid要求 必须符合输入要求,否则就提示400错误

 

小结

这次简单的阐述了一下请求格式与响应格式。包括string,bean,map.json,xml等多种方式,同时对一些注解做了简单介绍,但基本对理解本文核心内容能有一定帮助。

具体参考spring官方文档,或者关注本博客后面内容。










本文转自 wws5201985 51CTO博客,原文链接:http://blog.51cto.com/yjplxq/978957,如需转载请自行联系原作者
目录
相关文章
|
4月前
|
安全 算法 Java
在Spring Boot中应用Jasypt以加密配置信息。
通过以上步骤,可以在Spring Boot应用中有效地利用Jasypt对配置信息进行加密,这样即使配置文件被泄露,其中的敏感信息也不会直接暴露给攻击者。这是一种在不牺牲操作复杂度的情况下提升应用安全性的简便方法。
1079 10
|
9月前
|
Java 测试技术 微服务
微服务——SpringBoot使用归纳——Spring Boot中的项目属性配置——少量配置信息的情形
本课主要讲解Spring Boot项目中的属性配置方法。在实际开发中,测试与生产环境的配置往往不同,因此不应将配置信息硬编码在代码中,而应使用配置文件管理,如`application.yml`。例如,在微服务架构下,可通过配置文件设置调用其他服务的地址(如订单服务端口8002),并利用`@Value`注解在代码中读取这些配置值。这种方式使项目更灵活,便于后续修改和维护。
178 0
|
5月前
|
人工智能 安全 Java
Spring Boot yml 配置敏感信息加密
本文介绍了如何在 Spring Boot 项目中使用 Jasypt 实现配置文件加密,包含添加依赖、配置密钥、生成加密值、在配置中使用加密值及验证步骤,并提供了注意事项,确保敏感信息的安全管理。
1223 1
|
开发框架 前端开发 网络协议
Spring Boot结合Netty和WebSocket,实现后台向前端实时推送信息
【10月更文挑战第18天】 在现代互联网应用中,实时通信变得越来越重要。WebSocket作为一种在单个TCP连接上进行全双工通信的协议,为客户端和服务器之间的实时数据传输提供了一种高效的解决方案。Netty作为一个高性能、事件驱动的NIO框架,它基于Java NIO实现了异步和事件驱动的网络应用程序。Spring Boot是一个基于Spring框架的微服务开发框架,它提供了许多开箱即用的功能和简化配置的机制。本文将详细介绍如何使用Spring Boot集成Netty和WebSocket,实现后台向前端推送信息的功能。
3302 1
|
9月前
|
Java 微服务 Spring
微服务——SpringBoot使用归纳——Spring Boot中使用拦截器——拦截器使用实例
本文主要讲解了Spring Boot中拦截器的使用实例,包括判断用户是否登录和取消特定拦截操作两大场景。通过token验证实现登录状态检查,未登录则拦截请求;定义自定义注解@UnInterception实现灵活取消拦截功能。最后总结了拦截器的创建、配置及对静态资源的影响,并提供两种配置方式供选择,帮助读者掌握拦截器的实际应用。
376 0
|
9月前
|
Java 微服务 Spring
微服务——SpringBoot使用归纳——Spring Boot中的项目属性配置——少量配置信息的情形
在微服务架构中,随着业务复杂度增加,项目可能需要调用多个微服务。为避免使用`@Value`注解逐一引入配置的繁琐,可通过定义配置类(如`MicroServiceUrl`)并结合`@ConfigurationProperties`注解实现批量管理。此方法需在配置文件中设置微服务地址(如订单、用户、购物车服务),并通过`@Component`将配置类纳入Spring容器。最后,在Controller中通过`@Resource`注入配置类即可便捷使用,提升代码可维护性。
199 0
|
11月前
|
监控 JavaScript 数据可视化
建筑施工一体化信息管理平台源码,支持微服务架构,采用Java、Spring Cloud、Vue等技术开发。
智慧工地云平台是专为建筑施工领域打造的一体化信息管理平台,利用大数据、云计算、物联网等技术,实现施工区域各系统数据汇总与可视化管理。平台涵盖人员、设备、物料、环境等关键因素的实时监控与数据分析,提供远程指挥、决策支持等功能,提升工作效率,促进产业信息化发展。系统由PC端、APP移动端及项目、监管、数据屏三大平台组成,支持微服务架构,采用Java、Spring Cloud、Vue等技术开发。
453 7
|
消息中间件 Java Kafka
Spring boot 自定义kafkaTemplate的bean实例进行生产消息和发送消息
Spring boot 自定义kafkaTemplate的bean实例进行生产消息和发送消息
819 5
|
JavaScript Java 数据安全/隐私保护
基于SpringBoot+Vue毕业生信息招聘平台系统【源码+论文+演示视频+包运行成功】_基于spring vue的校园招聘系统源码(2)
基于SpringBoot+Vue毕业生信息招聘平台系统【源码+论文+演示视频+包运行成功】_基于spring vue的校园招聘系统源码
442 0
基于SpringBoot+Vue毕业生信息招聘平台系统【源码+论文+演示视频+包运行成功】_基于spring vue的校园招聘系统源码(2)
|
XML Java 数据库
Spring5入门到实战------10、操作术语解释--Aspectj注解开发实例。AOP切面编程的实际应用
这篇文章是Spring5框架的实战教程,详细解释了AOP的关键术语,包括连接点、切入点、通知、切面,并展示了如何使用AspectJ注解来开发AOP实例,包括切入点表达式的编写、增强方法的配置、代理对象的创建和优先级设置,以及如何通过注解方式实现完全的AOP配置。