spring4新特性之web开发增强
发布时间 - 2026-01-11 03:16:25 点击率:次从Spring4开始,Spring以Servlet3为进行开发,如果用Spring MVC 测试框架的话需要指定Servlet3兼容的jar包(因为其Mock的对象都是基于Servlet3的)。另外为了方便Rest开发,通过新的@RestController指定在控制器上,这样就不需要在每个@RequestMapping方法上加 @ResponseBody了。而且添加了一个AsyncRestTemplate ,支持REST客户端的异步无阻塞支持。

1、@RestController
Java代码
@RestController
public class UserController {
private UserService userService;
@Autowired
public UserController(UserService userService) {
this.userService = userService;
}
@RequestMapping("/test")
public User view() {
User user = new User();
user.setId(1L);
user.setName("haha");
return user;
}
@RequestMapping("/test2")
public String view2() {
return "{\"id\" : 1}";
}
}
其实现就是在@@RestController中加入@ResponseBody:
Java代码
@org.springframework.stereotype.Controller
@org.springframework.web.bind.annotation.ResponseBod
public @interface RestController {
}
这样当你开发Rest服务器端的时候,spring-mvc配置文件需要的代码极少,可能就仅需如下一行:
Java代码
<context:component-scan base-package="com.bjpowernode.spring4"/> <mvc:annotation-driven/>
2、mvc:annotation-driven配置变化
统一风格;将 enableMatrixVariables改为enable-matrix-variables属性;将ignoreDefaultModelOnRedirect改为ignore-default-model-on-redirect。
3、提供AsyncRestTemplate用于客户端非阻塞异步支持。
3.1、服务器端
Java代码
@RestController
public class UserController {
private UserService userService;
@Autowired
public UserController(UserService userService) {
this.userService = userService;
}
@RequestMapping("/api")
public Callable<User> api() {
System.out.println("=====hello");
return new Callable<User>() {
@Override
public User call() throws Exception {
Thread.sleep(10L * 1000); //暂停两秒
User user = new User();
user.setId(1L);
user.setName("haha");
return user;
}
};
}
}
非常简单,服务器端暂停10秒再返回结果(但是服务器也是非阻塞的)。具体参考我github上的代码。
3.2、客户端
Java代码
public static void main(String[] args) {
AsyncRestTemplate template = new AsyncRestTemplate();
//调用完后立即返回(没有阻塞)
ListenableFuture<ResponseEntity<User>> future = template.getForEntity("http://localhost:9080/spring4/api", User.class);
//设置异步回调
future.addCallback(new ListenableFutureCallback<ResponseEntity<User>>() {
@Override
public void onSuccess(ResponseEntity<User> result) {
System.out.println("======client get result : " + result.getBody());
}
@Override
public void onFailure(Throwable t) {
System.out.println("======client failure : " + t);
}
});
System.out.println("==no wait");
}
此处使用Future来完成非阻塞,这样的话我们也需要给它一个回调接口来拿结果; Future和Callable是一对,一个消费结果,一个产生结果。调用完模板后会立即返回,不会阻塞;有结果时会调用其回调。
AsyncRestTemplate默认使用SimpleClientHttpRequestFactory,即通过java.net.HttpURLConnection实现;另外我们也可以使用apache的http components;使用template.setAsyncRequestFactory(new HttpComponentsAsyncClientHttpRequestFactory());设置即可。
另外在开发时尽量不要自己注册如:
Java代码
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/> <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
尽量使用
Java代码
<mvc:annotation-driven/>
它设计的已经足够好,使用子元素可以配置我们需要的配置。
且不要使用老版本的:
Java代码
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"/> <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
否则可能得到如下异常:
写道
Circular view path [login]: would dispatch back to the current handler URL [/spring4/login] again. Check your ViewResolver setup! (Hint: This may be the result of an unspecified view, due to default view name generation.)
总结
以上所述是小编给大家介绍的spring4新特性之web开发增强,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
# spring
# web开发
# Spring事物的传播特性详解
# Spring Boot 2.4新特性减少95%内存占用问题
# Spring Boot 2.4 新特性之一键构建Docker镜像的过程详解
# spring5新特性全面介绍
# SpringBoot新特性之全局懒加载机制
# 全面解析Spring Security 过滤器链的机制和特性
# SpringBoot2.3新特性优雅停机详解
# Spring MVC接受表单自动封装特性实例解析
# SpringBoot2.0新特性之配置绑定全解析
# Spring各版本新特性的介绍
# Intellij IDEA 2017新特性之Spring Boot相关特征介绍
# 简单了解Spring Framework5.0新特性
# 浅析Spring4新特性概述
# Spring 4 支持的 Java 8 特性
# java Spring 5 新特性函数式Web框架详细介绍
# 详解Spring工厂特性
# 回调
# 客户端
# 小编
# 都是
# 是在
# 在此
# 就不
# 当你
# 给大家
# 为其
# 可以使用
# 后会
# 极少
# 来完成
# 所述
# 完后
# 给它
# 给我留言
# 仅需
# 配置文件
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?
教你用AI将一段旋律扩展成一首完整的曲子
香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化
Laravel如何使用API Resources格式化JSON响应_Laravel数据资源封装与格式化输出
JS去除重复并统计数量的实现方法
手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?
北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?
Laravel如何保护应用免受CSRF攻击?(原理和示例)
JavaScript实现Fly Bird小游戏
网站制作价目表怎么做,珍爱网婚介费用多少?
bing浏览器学术搜索入口_bing学术文献检索地址
如何在不使用负向后查找的情况下匹配特定条件前的换行符
Android Socket接口实现即时通讯实例代码
php打包exe后无法访问网络共享_共享权限设置方法【教程】
html5如何设置样式_HTML5样式设置方法与CSS应用技巧【教程】
如何用低价快速搭建高质量网站?
如何在阿里云完成域名注册与建站?
Laravel怎么创建自己的包(Package)_Laravel扩展包开发入门到发布
如何用AI帮你把自己的生活经历写成一个有趣的故事?
网页制作模板网站推荐,网页设计海报之类的素材哪里好?
免费网站制作appp,免费制作app哪个平台好?
再谈Python中的字符串与字符编码(推荐)
Laravel如何处理JSON字段_Eloquent原生JSON字段类型操作教程
如何在阿里云通过域名搭建网站?
IOS倒计时设置UIButton标题title的抖动问题
html5audio标签播放结束怎么触发事件_onended回调方法【教程】
PythonWeb开发入门教程_Flask快速构建Web应用
魔毅自助建站系统:模板定制与SEO优化一键生成指南
html5如何实现懒加载图片_ intersectionobserver api用法【教程】
如何用ChatGPT准备面试 模拟面试问答与职场话术练习教程
高配服务器限时抢购:企业级配置与回收服务一站式优惠方案
Linux系统运维自动化项目教程_Ansible批量管理实战
如何用JavaScript实现文本编辑器_光标和选区怎么处理
Claude怎样写约束型提示词_Claude约束提示词写法【教程】
如何在 Go 中优雅地映射具有动态字段的 JSON 对象到结构体
网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?
Win11怎么修改DNS服务器 Win11设置DNS加速网络【指南】
Laravel怎么连接多个数据库_Laravel多数据库连接配置
如何用已有域名快速搭建网站?
Laravel如何监控和管理失败的队列任务_Laravel失败任务处理与监控
Win11怎么关闭透明效果_Windows11辅助功能视觉效果设置
Laravel如何使用Passport实现OAuth2?(完整配置步骤)
Zeus浏览器网页版官网入口 宙斯浏览器官网在线通道
零服务器AI建站解决方案:快速部署与云端平台低成本实践
如何在腾讯云服务器上快速搭建个人网站?
如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?
Laravel如何处理和验证JSON类型的数据库字段
Win11应用商店下载慢怎么办 Win11更改DNS提速下载【修复】
zabbix利用python脚本发送报警邮件的方法
移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?

