1 @RestController
導入:
import org.springframework.web.bind.annotation.RestController;
官方文檔解釋:
@RestController is a stereotype annotation that combines @ResponseBody and @Controller.
可以看出,@RestController = @ResponseBody + @Controller,也就是說如果使用了@RestController來註解Controller,那麼表示這個Controller中的方法只能返回你封裝好的result vo類,一般前端拿到的是一個json字符串,而不能返回jsp頁面,在配置文件中配置的視圖解析器在這個Controller裡將失效。
2 @Slf4j
在類上使用這個註解可以直接實現日誌輸出,可以替代我們在需要打日誌的每個類中的代碼:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
private static final Logger LOGGER = LoggerFactory.getLogger(FeatureConfigController.class);
使用方法:
在pom.xml引入相應jar包:
org.projectlombok
lombok
在類上加上@Slf4j註解,然後在方法中可以直接使用log變量來打日誌。如果註解@Slf4j注入後找不到變量log,需要IDEA安裝lombok插件:File → settings → Plugins ,搜索lombok。
3 @SneakyThrows
導入:
import lombok.SneakyThrows;
@SneakyThrows註解使用在方法上時,當該方法內有異常時不必try catch,也不必throws,@SneakyThrows註解會自動幫你向上拋出。
使用方法:
import lombok.SneakyThrows;
public class SneakyThrowsExample implements Runnable {
@SneakyThrows(UnsupportedEncodingException.class)
public String utf8ToString(byte[] bytes) {
return new String(bytes, "UTF-8");
}
@SneakyThrows
public void run() {
throw new Throwable();
}
}
@SneakyThrows要慎用,相關官方文檔。
4 @GetMapping、@PostMapping、@PutMapping、@DeleteMapping
Spring4.3中引進了{@GetMapping、@PostMapping、@PutMapping、@DeleteMapping},來幫助簡化常用的HTTP方法的映射,並更好地表達被註解方法的語義。
@{Get/Post/Put/Delete}Mapping是一個組合註解,是@RequestMapping(method = RequestMethod.{Get/Post/Put/Delete})的縮寫。該註解將HTTP {Get/Post/Put/Delete} 映射到 特定的處理方法上。
使用方法:
@PostMapping("requestpath")
public ResultVo function(){}
5 @PreAuthorize、@PostAuthorize
Spring的 @PreAuthorize/@PostAuthorize 註解更適合方法級的安全,也支持Spring 表達式語言,提供了基於表達式的訪問控制。
@PreAuthorize 註解適合進入方法前的權限驗證,@PreAuthorize可以將登錄用戶的roles/permissions參數傳到方法中。
@PostAuthorize 註解使用並不多,在方法執行後再進行權限驗證。
所以它適合驗證帶有返回值的權限。Spring EL 提供 返回對象能夠在表達式語言中獲取返回的對象returnObject。
還有@EnableWebSecurity和@EnableGlobalMethodSecurity,下面給了一個Spring Security With Annotation demo,可以看看具體的使用方法。
一個Spring Security With Annotation demo
6 @ControllerAdvice @ExceptionHandler
異常的統一處理。
@ControllerAdvice,是spring3.2提供的新註解,從名字上可以看出大體意思是控制器增強。使用@ControllerAdvice註解某個類的時候,該類會被spring當做一個組件,可以在context:component-scan被掃描到。
@ExceptionHandler,異常處理器,應用到所有@RequestMapping註解的方法上,在其拋出指定異常時執行統一異常處理方法。
@ControllerAdvice
@Slf4j
public class ControllerAdviceTest {
@ExceptionHandler(Exception.class)
@ResponseBody
public ResultVo handleException(Exception e) {
log.warn("拋出{}異常", e);
//返回一個結果類vo
ResultVo result = new ResultVo();
result.setStatus(Constants.Fail);
result.setMsg(e.getMessage());
return result;
}
}
7 其它常用的 lombok 註解
@Data :註解在類上;提供類所有屬性的 getting 和 setting 方法,此外還提供了equals、canEqual、hashCode、toString 方法
@EqualsAndHashCode:實現equals()方法和hashCode()方法
@ToString:實現toString()方法
@Setter:註解在屬性上;為屬性提供 setting 方法
@Getter:註解在屬性上;為屬性提供 getting 方法
@NoArgsConstructor:註解在類上;為類提供一個無參的構造方法
@AllArgsConstructor:註解在類上;為類提供一個全參的構造方法
@Builder:使用構建模式(Builder pattern)構建一個類實例
不使用 lombok 的方案
public class Example{
private T foo;
private final String bar;
private Example(T foo, String bar) {
this.foo = foo;
this.bar = bar;
}
public staticExampleBuilder builder() {
return new ExampleBuilder();
}
public static class ExampleBuilder{
private T foo;
private String bar;
private ExampleBuilder() {}
public ExampleBuilder foo(T foo) {
this.foo = foo;
return this;
}
public ExampleBuilder bar(String bar) {
this.bar = bar;
return this;
}
@java.lang.Override
public String toString() {
return "ExampleBuilder(foo = " + foo + ", bar = " + bar + ")";
}
public Example build() {
return new Example(foo, bar);
}
}
}
使用 lombok 的方案 guava 16.0.1
@Builder
public class Example {
private int foo;
private final String bar;
}
構造一個Example實例,屬性不需要單獨set
Example.builder().foo(1).bar(“test”).build()
閱讀更多 慕課網 的文章