spring4新特性之web開發(fā)增強
從Spring4開始,Spring以Servlet3為進行開發(fā),如果用Spring MVC 測試框架的話需要指定Servlet3兼容的jar包(因為其Mock的對象都是基于Servlet3的)。另外為了方便Rest開發(fā),通過新的@RestController指定在控制器上,這樣就不需要在每個@RequestMapping方法上加 @ResponseBody了。而且添加了一個AsyncRestTemplate ,支持REST客戶端的異步無阻塞支持。
1、@RestController
Java代碼
@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}"; } }
其實現(xiàn)就是在@@RestController中加入@ResponseBody:
Java代碼
@org.springframework.stereotype.Controller @org.springframework.web.bind.annotation.ResponseBod public @interface RestController { }
這樣當你開發(fā)Rest服務器端的時候,spring-mvc配置文件需要的代碼極少,可能就僅需如下一行:
Java代碼
<context:component-scan base-package="com.bjpowernode.spring4"/> <mvc:annotation-driven/>
2、mvc:annotation-driven配置變化
統(tǒng)一風格;將 enableMatrixVariables改為enable-matrix-variables屬性;將ignoreDefaultModelOnRedirect改為ignore-default-model-on-redirect。
3、提供AsyncRestTemplate用于客戶端非阻塞異步支持。
3.1、服務器端
Java代碼
@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秒再返回結(jié)果(但是服務器也是非阻塞的)。具體參考我github上的代碼。
3.2、客戶端
Java代碼
public static void main(String[] args) { AsyncRestTemplate template = new AsyncRestTemplate(); //調(diào)用完后立即返回(沒有阻塞) ListenableFuture<ResponseEntity<User>> future = template.getForEntity("http://localhost:9080/spring4/api", User.class); //設置異步回調(diào) 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來完成非阻塞,這樣的話我們也需要給它一個回調(diào)接口來拿結(jié)果; Future和Callable是一對,一個消費結(jié)果,一個產(chǎn)生結(jié)果。調(diào)用完模板后會立即返回,不會阻塞;有結(jié)果時會調(diào)用其回調(diào)。
AsyncRestTemplate默認使用SimpleClientHttpRequestFactory,即通過java.net.HttpURLConnection實現(xiàn);另外我們也可以使用apache的http components;使用template.setAsyncRequestFactory(new HttpComponentsAsyncClientHttpRequestFactory());設置即可。
另外在開發(fā)時盡量不要自己注冊如:
Java代碼
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/> <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
盡量使用
Java代碼
<mvc:annotation-driven/>
它設計的已經(jīng)足夠好,使用子元素可以配置我們需要的配置。
且不要使用老版本的:
Java代碼
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"/> <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
否則可能得到如下異常:
寫道
Circular view path [login]: would dispatch back to the current handler URL [/spring4/login] again. Check your ViewResolver setup! (Hint: This may be the result of an unspecified view, due to default view name generation.)
總結(jié)
以上所述是小編給大家介紹的spring4新特性之web開發(fā)增強,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
- Spring事物的傳播特性詳解
- Spring Boot 2.4新特性減少95%內(nèi)存占用問題
- Spring Boot 2.4 新特性之一鍵構(gòu)建Docker鏡像的過程詳解
- spring5新特性全面介紹
- SpringBoot新特性之全局懶加載機制
- 全面解析Spring Security 過濾器鏈的機制和特性
- SpringBoot2.3新特性優(yōu)雅停機詳解
- Spring MVC接受表單自動封裝特性實例解析
- SpringBoot2.0新特性之配置綁定全解析
- Spring各版本新特性的介紹
- Intellij IDEA 2017新特性之Spring Boot相關特征介紹
- 簡單了解Spring Framework5.0新特性
- 淺析Spring4新特性概述
- Spring 4 支持的 Java 8 特性
- java Spring 5 新特性函數(shù)式Web框架詳細介紹
- 詳解Spring工廠特性
相關文章
Java如何接收前端easyui?datagrid傳遞的數(shù)組參數(shù)
這篇文章分享一下怎么在easyui的datagrid刷新表格時,在后端java代碼中接收datagrid傳遞的數(shù)組參數(shù),本文通過實例代碼給大家介紹的非常詳細,需要的朋友參考下吧2023-11-11使用XSD校驗Mybatis的SqlMapper配置文件的方法(1)
這篇文章以前面對SqlSessionFactoryBean的重構(gòu)為基礎,簡單的介紹了相關操作知識,然后在給大家分享使用XSD校驗Mybatis的SqlMapper配置文件的方法,感興趣的朋友參考下吧2016-11-11dockerfile-maven-plugin極簡教程(推薦)
這篇文章主要介紹了dockerfile-maven-plugin極簡教程,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-10-10一文詳解如何配置MyBatis實現(xiàn)打印可執(zhí)行的SQL語句
在MyBatis中,動態(tài)SQL是一個強大的特性,允許我們在XML映射文件或注解中編寫條件語句,根據(jù)運行時的參數(shù)來決定SQL的具體執(zhí)行內(nèi)容,這篇文章主要給大家介紹了關于如何配置MyBatis實現(xiàn)打印可執(zhí)行的SQL語句的相關資料,需要的朋友可以參考下2024-08-08java聯(lián)調(diào)生成測試數(shù)據(jù)工具類方式
這篇文章主要介紹了java聯(lián)調(diào)生成測試數(shù)據(jù)工具類方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-03-03