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

相关推荐

  • EasyCVR通过Ehome协议接入部分设备显示离线排查报告

    EasyCVR通过Ehome协议接入部分设备显示离线排查报告对于需要将不同视频协议做融合的项目,我们一般都是建议大家选用EasyCVR视频平台,EasyCVR支持多种协议的视频接入,对于通用的第三方协议,我们支持了海康的Ehome和GB28181的国标协议。EasyCVR视频网关平台接入的部分Ehome设备显示离线,可以从下图中看到,除了通过HIKSDK接入的设备外,通过Ehome接入的设备全部离线:可见离线的部分设备都是Ehome协议接入,Ehome设备为主动注册类型,判断设备是否真实在线的方法一般为抓取对应对端口7660的包,或者是在海康sdk的回调

    2022年10月28日
  • goland2021.07激活码【最新永久激活】[通俗易懂]

    (goland2021.07激活码)最近有小伙伴私信我,问我这边有没有免费的intellijIdea的激活码,然后我将全栈君台教程分享给他了。激活成功之后他一直表示感谢,哈哈~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.htmlS3…

    2022年3月22日
  • 关于this指针

    关于this指针一个类的对象中实际只包含了该对象的数据成员信息,当我们创建了多个类的对象时,使对象1调用该类的成员函数,为什么可以改变对象1中的信息,而不去设置其他对象的信息?成员函数在类中只有一份,所有该类的对象共同使用,编译器是如何识别并处理的呢?编译器识别一个类分为三步:1.识别类的类名2.识别类的成员变量3.识别类的成员函数并对成员函数进行修改修改方式:成员函数有一个隐藏…

    2022年5月16日
  • 如何设置让网站禁止被爬虫收录?robots.txt

    如何设置让网站禁止被爬虫收录?robots.txt

    2021年10月9日
  • 网络号 子网号 主机号「建议收藏」

    网络号 子网号 主机号「建议收藏」网络号子网号主机号第一个例子:已知 IP:192.169.20.50   子网掩码:255.255.255.224  求网络号 子网号 主机号。首先子网掩码255.255.255.224转换为二进制位255.255.255.224:11111111.11111111.11111111.11100000可以看到这个掩码的左边三节与C类默认掩码相同,只有第四节与C类默认掩码不 同,

    2022年6月24日
  • 安卓so文件解密_Android是什么文件

    安卓so文件解密_Android是什么文件作者论坛账号:genliese1.前言一道so文件动态加解密的CrackMe,运行时解密要执行的函数,且在执行后立马加密CrackMe:dex文件加的数字壳,so文件无壳,因为反调试,所以so文件采用全静态分析分析环境:脱壳工具:FARTGDAIDAFridaPyCharmVSCode2.分析过程2.1脱壳拿到FART定制ROM下跑,得到想要的dex文件,数字壳抹去了前八个字节的dex文件魔…

    2022年9月14日

发表回复

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

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