java restcontroller_java中的RestController

java restcontroller_java中的RestController从Spring4开始,Spring以Servlet3为进行开发,如果用SpringMVC测试框架的话需要指定Servlet3兼容的jar包(因为其Mock的对象都是基于Servlet3的)。另外为了方便Rest开发,通过新的@RestController指定在控制器上,这样就不需要在每个@RequestMapping方法上加@ResponseBody了。而且添加了一个AsyncRestTemp…

大家好,又见面了,我是你们的朋友全栈君。

从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配置文件需要的代码极少,可能就仅需如下一行:

2、mvc:annotation-driven配置变化

统一风格;将 enableMatrixVariables改为enable-matrix-variables属性;将ignoreDefaultModelOnRedirect改为ignore-default-model-on-redirect。

3、提供AsyncRestTemplate用于客户端非阻塞异步支持。

3.1、服务器端@RestController

public class UserController {

private UserService userService;

@Autowired

public UserController(UserService userService) {

this.userService = userService;

}

@RequestMapping(“/api”)

public Callable api() {

System.out.println(“=====hello”);

return new Callable() {

@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> future = template.getForEntity(“http://localhost:9080/spring4/api”, User.class);

//设置异步回调

future.addCallback(new ListenableFutureCallback>() {

@Override

public void onSuccess(ResponseEntity 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());设置即可。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/149322.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • [驱动注册]platform_driver_register()与platform_device_register()「建议收藏」

    [驱动注册]platform_driver_register()与platform_device_register()「建议收藏」[驱动注册]platform_driver_register()与platform_device_register()     设备与驱动的两种绑定方式:在设备注册时进行绑定及在驱动注册时进行绑定。以一个USB设备为例,有两种情形:(1)先插上USB设备并挂到总线中,然后在安装USB驱动程序过程中从总线上遍历各个设备,看驱动程序是否与其相匹配,如果匹配就将两者邦定。这就是p

    2022年7月26日
    4
  • Python冒泡排序算法及其优化「建议收藏」

    Python冒泡排序算法及其优化「建议收藏」冒泡排序所谓冒泡,就是将元素两两之间进行比较,谁大就往后移动,直到将最大的元素排到最后面,接着再循环一趟,从头开始进行两两比较,而上一趟已经排好的那个元素就不用进行比较了。(图中排好序的元素标记为黄色柱子)冒泡排序动图演示上python代码:defbubble_sort(items):foriinrange(len(items)-1):…

    2022年10月15日
    2
  • ubuntu pip清华源_ubuntu 清华源

    ubuntu pip清华源_ubuntu 清华源pip清华镜像源使用方法总结2020年07月07日|萬仟网网络运营|我要评论临时使用pipinstall-ihttps://pypi.tuna.tsinghua.edu.cn/simplesome-package注意,simple不能少,是https而不是http设为默认修改~/.config/pip/pip.conf(Linux)%…

    2025年5月23日
    5
  • 【SQL基础-4】SQL语句练习实例—在SQLzoo平台练习

    目录1平台操作简介2select基本语句2.1第1节selectbasic2.2第1节练习3SELECTfromWORLD练习3.1第2节SELECTfromWORLDTutorial3.2第2节练习4SELECT_from_Nobel练习4.1第3节SELECT_from_Nobel_Tutorial4.2第3节练习5归纳参考文章1平台操作简介本节练习内容主要是该平台左侧红色框内共9节内容,包括对应9节练习。每一节内容和练习完成

    2022年4月13日
    60
  • 动态因果图模型_因果图是谁提出来的

    动态因果图模型_因果图是谁提出来的文章目录1.动态因果图模型1.1引言1.1.1信度网的应用与不足1.1.2因果图的优势1.2模型主要思想1.3模型的表达方式1.3.1因果图与故障诊断1.3.2因果图分类1.3.3因果图形式化表示1.3.4因果图的正规化1.4因果树1.4.1微因果树1.4.2因果树与因果图对比2.动态因果图推理2.1待求解问题的数学形式2.2割集2.2.1一阶割集2.2.2最终割集2.3因果图编译2.3.1逻辑解环2.3.2求最终割集式2.3.3求不交化割集2.4因果图计算简化2

    2022年8月14日
    5
  • visifire 控件

    visifire 控件引言Silverlight对于图形图像处理方面,从1.0时代起就给予了很强大的支持,所以我们可以在Silverlight中实现非常棒的各种统计图表,然而现在有了一些开源的项目,使得这项工作更加的简单。本文我将介绍一个开源的项目visifire,使用它可以在Silverlight2中实现超酷的图表。简单图表首先我们需要下载Visifire项目Silverlight开发包,在建立完项…

    2022年7月21日
    15

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号