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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 如何用腾讯云服务器搭建网站[通俗易懂]

    如何用腾讯云服务器搭建网站[通俗易懂]对于新手开发者用户,若想搭建一个简单的网站,只需通过以下5个步骤即可拥有属于自己的网站。1,注册/转入域名域名注册是在互联网上建立任何服务的基础,搭建一个网站前首先需拥有一个域名。1.如果已经在其他注册商拥有了自己的域名,可以域名转入。如果还没有域名,就需要进行域名注册。注册域名时,建议选择自己喜欢的、简单、易记的英文字母,并与自己网站性质相关。2,购买腾讯云服务器网站在Internet需要有一个空间作为载体存放用户的网站信息,所以需要购买腾讯云服务器。腾讯云服务器(CVM

    2022年5月23日
    35
  • Java入门必背100条

    Java入门必背100条Java必背100条1、编写:编写的Java代码保存在以“.java”结尾的源文件中。2、编译:使用javac.exe命令编译java源文件,生成字节码文件。格式:javac源文件名.java3、运行:使用java.exe命令解释运行字节码文件。格式:java类名4、在一个java源文件中可以声明多个class,但是只能最多有一个类声明为public,而且被声明为public的类的…

    2022年7月7日
    22
  • 视频监控知识

    视频监控知识CIF分辨率CIF分辨率 CIFcommonintermediateformat DCIFdoubleintermediateformat QCIFquartercommonintermediateformat 图象格式 亮度取样的象素个…

    2022年6月28日
    28
  • 阿里的笔试题_阿里巴巴java笔试题

    阿里的笔试题_阿里巴巴java笔试题2015阿里笔试题阿里2015招聘实习生笔试题笔试最后一题,题目大意是:给定一数组,数组中每个元素代表一个宽度为1的墙,求由这些墙能装多少水,输入为[1,0,2,1,0,1,3,2,1,2,1],输出为6.时间复杂度为O(n),空间复杂度为O(1).#includeusingnamespacestd;intVolume(intA[],intn){i

    2025年10月10日
    5
  • 开启wallpaper engine的时候 很卡_wallpaper用独显

    开启wallpaper engine的时候 很卡_wallpaper用独显轻松一步解决wallpaperengine小红车卡顿鼠标延迟问题

    2025年10月26日
    3
  • 递归求数组的和_java递归教程

    递归求数组的和_java递归教程使用递归实现数组求和示例分享思路如下:给定一个含有n个元素的整型数组a,求a中所有元素的和。问题的难点在于如何使用递归上。如果使用递归,则需要考虑如何进行递归执行的开始以及终止条件,首先如果数组元素个数为0,那么和为0。同时,如果数组元素个数为n,那么先求出前n-1个元素之和,再加上a[n-1]即可。此时可以完成递归功能。总之,递归就是在某个函数的执行过程中首先判断它的终止条件参数,终止条件参数满…

    2022年9月1日
    7

发表回复

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

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