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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 电脑ping命令显示不是内部命令_cmd一直ping的命令

    电脑ping命令显示不是内部命令_cmd一直ping的命令在cmd中用PING命令时,出现’Ping’不是内部或外部命令,也不是可运行的程序或批处理文件。先了解一下内容:1、可执行文件、命令文件和批处理文件以.exe或者.com或者.bat为扩展名的文件分别被称为可执行文件、命令文件和批处理文件。2、外部命令和内部命令DOS命令可以分为外部命令和内部命令,内部命令包含在一个名为command.com的文件,在系统启动时候驻留在内存中。外部命令是保存在c…

  • Qt 之自定义搜索框

    Qt 之自定义搜索框简述关于搜索框,大家都经常接触。例如:浏览器搜索、Windows资源管理器搜索等。当然,这些对于Qt实现来说毫无压力,只要思路清晰,分分钟搞定。方案一:调用QLineEdit现有接口voidaddAction(QAction*action,ActionPositionposition)在QLineEdit的前/后添加部件,ActionPosition表示部件所在方位。QAction

  • 股票实时数据接口api_股票开放接口api

    股票实时数据接口api_股票开放接口api免费股票数据API接口提供沪深、香港、美国股市信息。1.沪深股市2.香港股市3.美国股市4.香港股市列表5.美国股市列表6.深圳股市列表7.沪股列表API文档:https://www.juhe.cn/docs/api/id/21,申请获取APPKEY即可调用。示例代码PHP股票数据示例Python股票数据接口调用示例C#股票…

  • Mutex对象使用时发现的问题

    Mutex对象使用时发现的问题Mutex对象等待互斥对象的方法有:Mutex.WaitAll、WaitOne、Mutex.WaitAny使用Mutex对象经常出现的异常现象有:异常一、 由于出现被放弃的mutex,等待过程结束原因:获取互斥对象后没有显式的释放对应的互斥对象就结束了对应的线程解决办法:每调用一个等待方法,在结束调用时都要调用ReleaseMutex()方法进行Mutex对象释放。而每种释

  • SDIO接口_gmac接口是什么意思

    SDIO接口_gmac接口是什么意思文章目录SDIO信号和接口SDIO命令流程SDIO寄存器卡检测卡识别卡常用命令SDIO,全称:SecureDigitalInputandOutput,即安全数字输入输出接口。SDIO卡是在SD内存卡接口的基础上发展起来的接口,SDIO接口兼容以前的SD内存卡,并且可以连接SDIO接口的设备,目前根据SDIO协议的SPEC,SDIO接口支持的设备总类有蓝牙,网卡,电视卡等。支持三种不同…

  • 2020,最新手机号码手机验证正则表达式,持续更新「建议收藏」

    2020,最新手机号码手机验证正则表达式,持续更新「建议收藏」最近在跟一个别人写好上线的项目,今天出了一个bug,部分正常的手机号验证格式不通,查看了代码发现正则表达式有较大的错误,如图:存在的问题:1.存在逗号2.不够全面,部分正常的手机号验证不通过所以决定自己写,百度一下手机号的格式,下面应该是比较全面,所以就自己根据下面的写验证的正则表达式,如有小伙伴发现下图仍有遗漏请在评论指出,我看到会马上更新最后写出来的正则表达式:Patternp=Pattern.compile(“^1(3([1-35-9]\\d|4[1-..

发表回复

您的电子邮箱地址不会被公开。

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