java中的RestController
来源:互联网 发布:淘宝搜关键词在哪里 编辑:程序博客网 时间:2024/06/05 05:59
Spring4新特性——Web开发的增强
Spring4新特性——泛型限定式依赖注入
Spring4新特性——核心容器的其他改进
Spring4新特性——Web开发的增强
从Spring4开始,Spring以Servlet3为进行开发,如果用Spring MVC 测试框架的话需要指定Servlet3兼容的jar包(因为其Mock的对象都是基于Servlet3的)。另外为了方便Rest开发,通过新的@RestController指定在控制器上,这样就不需要在每个@RequestMapping方法上加 @ResponseBody了。而且添加了一个
AsyncRestTemplate
,支持REST客户端的异步无阻塞支持。
1、@RestController
查看复制到剪贴板打印
@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:
查看复制到剪贴板打印
@org.springframework.stereotype.Controller
@org.springframework.web.bind.annotation.ResponseBody
public @interface RestController {
}
这样当你开发Rest服务器端的时候,spring-mvc配置文件需要的代码极少,可能就仅需如下一行:
查看复制到剪贴板打印
<context:component-scan base-package="com.sishuok.spring4"/>
<mvc:annotation-driven/>
2、mvc:annotation-driven配置变化
统一风格;将 enableMatrixVariables改为enable-matrix-variables属性;将ignoreDefaultModelOnRedirect改为ignore-default-model-on-redirect。
3、提供AsyncRestTemplate用于客户端非阻塞异步支持。
3.1、服务器端
对于服务器端的springmvc开发可以参考https://github.com/zhangkaitao/servlet3-showcase中的chapter3-springmvc
查看复制到剪贴板打印
@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、客户端
查看复制到剪贴板打印
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());设置即可。
本文出自 “ghost” 博客,请务必保留此出处http://caizi.blog.51cto.com/5234706/1557325
- java中的RestController
- @RestController
- @RestController
- @RestController
- @RestController
- 【Java】Spring4.0 @RestController与@Controller
- Java--@RestController(2017-12-05)
- @Controller @RestController
- Spring中的@Controller注解和@RestController注解的相同点和不同点
- Spring注解之:@RestController
- 关于@RestController和@Controller
- @RestController的使用
- @RestController和@Controller
- @Controller和@RestController
- @RestController @Controller区别
- springboot的restcontroller
- @Controller和@RestController区别
- @RestController与@Controller区别
- java显示出错
- java一个实验
- java中接口的定义与实现
- java页面模糊查询
- 自学成才秘籍!机器学习&深度学习经典资料汇总
- java中的RestController
- png jpg
- java中map集合两种遍历方法
- tomcat的目录结构
- 尚学堂学习周期及相关视频简介
- 浅谈Java中的Set、List、Map的区别(1)
- mysql创建定时任务
- mysql如何利用Navicat 导出和导入数据库
- 使用SQL语句清空数据库所有表的数据