日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Spring 4.1和Java 8:java.util.Optional

發布時間:2023/12/3 java 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring 4.1和Java 8:java.util.Optional 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


由于Spring 4.1的Java 8的的java.util.Optional ,容器對象可能會或可能不包含非空值,支持與@RequestParam , @RequestHeader和@MatrixVariable 。 使用Java 8的java.util.Optional請確保參數永遠不會為null 。


請求參數

在此示例中,我們將使用@RequestParam將java.time.LocalDate綁定為java.util.Optional :

@RestController @RequestMapping("o") public class SampleController {@RequestMapping(value = "r", produces = "text/plain")public String requestParamAsOptional(@DateTimeFormat(iso = DateTimeFormat.ISO.DATE)@RequestParam(value = "ld") Optional<LocalDate> localDate) {StringBuilder result = new StringBuilder("ld: ");localDate.ifPresent(value -> result.append(value.toString()));return result.toString();} }

在Spring 4.1之前,我們會遇到一個例外,即找不到匹配的編輯器或轉換策略。 從Spring 4.1開始,這不再是問題。 為了驗證綁定是否正常工作,我們可以創建一個簡單的集成測試:

@RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(classes = Application.class) @WebAppConfiguration public class SampleSomeControllerTest {@Autowiredprivate WebApplicationContext wac;private MockMvc mockMvc;@Beforepublic void setUp() throws Exception {mockMvc = MockMvcBuilders.webAppContextSetup(wac).build();}// ...}

在第一個測試中,我們將檢查綁定是否正常工作以及是否返回了正確的結果:

@Test public void bindsNonNullLocalDateAsRequestParam() throws Exception {mockMvc.perform(get("/o/r").param("ld", "2020-01-01")).andExpect(content().string("ld: 2020-01-01")); }

在下一個測試中,我們將不傳遞ld參數:

@Test public void bindsNoLocalDateAsRequestParam() throws Exception {mockMvc.perform(get("/o/r")).andExpect(content().string("ld: ")); }

兩個測試都應該是綠色的!

請求標題

同樣,我們可以將@RequestHeader綁定到java.util.Optional :

@RequestMapping(value = "h", produces = "text/plain") public String requestHeaderAsOptional(@RequestHeader(value = "Custom-Header") Optional<String> header) {StringBuilder result = new StringBuilder("Custom-Header: ");header.ifPresent(value -> result.append(value));return result.toString(); }

和測試:

@Test public void bindsNonNullCustomHeader() throws Exception {mockMvc.perform(get("/o/h").header("Custom-Header", "Value")).andExpect(content().string("Custom-Header: Value")); }@Test public void noCustomHeaderGiven() throws Exception {mockMvc.perform(get("/o/h").header("Custom-Header", "")).andExpect(content().string("Custom-Header: ")); }

矩陣變量

在Spring 3.2中@MatrixVariable注釋指示方法參數應綁定到路徑段內的名稱/值對:

@RequestMapping(value = "m/{id}", produces = "text/plain") public String execute(@PathVariable Integer id,@MatrixVariable Optional<Integer> p,@MatrixVariable Optional<Integer> q) {StringBuilder result = new StringBuilder();result.append("p: ");p.ifPresent(value -> result.append(value));result.append(", q: ");q.ifPresent(value -> result.append(value));return result.toString(); }

可以通過/o/m/42;p=4;q=2 url調用上述方法。 讓我們為此做一個測試:

@Test public void bindsNonNullMatrixVariables() throws Exception {mockMvc.perform(get("/o/m/42;p=4;q=2")).andExpect(content().string("p: 4, q: 2")); }

不幸的是,該測試將失敗,因為默認情況下,Spring MVC中禁用了對@MatrixVariable批注的支持。 為了啟用它,我們需要調整配置并將RequestMappingHandlerMapping的removeSemicolonContent屬性設置為false 。 默認情況下,它設置為true 。 我已經用WebMvcConfigurerAdapter完成了,如下所示:

@Configuration public class WebMvcConfig extends WebMvcConfigurerAdapter {@Overridepublic void configurePathMatch(PathMatchConfigurer configurer) {UrlPathHelper urlPathHelper = new UrlPathHelper();urlPathHelper.setRemoveSemicolonContent(false);configurer.setUrlPathHelper(urlPathHelper);} }

現在所有測試都通過了! 請在這里找到本文的源代碼: https : //github.com/kolorobot/spring41-samples

翻譯自: https://www.javacodegeeks.com/2014/07/spring-4-1-and-java-8-java-util-optional.html

總結

以上是生活随笔為你收集整理的Spring 4.1和Java 8:java.util.Optional的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。