Restful 風格下的Spring Boot的注解開發
電商網站經常用到的restful風格 ,只是一種開發思想,不是開發框架,現在的技術並沒有完全實現restful風格。 restful風格是一種架構理念,完美的詮釋了http協議 restful 方式需要配置一套restful風格的前端控制器,用/來標識url-pattern RequestMapping(value="/ViewItems/{id}" String id) java類里面使用@PathVariable("id") 注解進行參數綁定String id或者綁定java Bean的bean屬性
@SpringBootApplication
Springboot 提供了統一的注解@SpringBootApplication來替代這三個注解@Configuration、@EnableAutoConfiguration、@ComponentScan,簡化程序的配置。
@EnableAutoConfiguration
@EnableAutoConfiguration:能夠自動配置spring的上下文,試圖猜測和配置你想要的bean類,通常會自動根據你的類路徑和你的bean定義自動配置。
@ComponentScan
@ComponentScan:會自動掃描指定包下的全部標有@Component的類,並注冊成bean,當然包括@Component下的子注解@Service,@Repository,@Controller。
@Configuration
@Configuration標注在類上,相當於把該類作為spring的xml配置文件中的<beans>,作用為:配置spring容器(應用上下文),加載配置xml文件的注解。用@Configuration注解該類,等價與XML中配置beans;用@Bean標注方法等價於XML中配置bean。
@EnableWebMvc
想要以Java形式定制默認的配置,你可以簡單的實現WebMvcConfigurer接口,或者繼承WebMvcConfigurerAdapter並重寫需要的方法: @Configuration class WebMvcConfig extends WebMvcConfigurerAdapter { @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/"); registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/"); }
}
@Override
Override是一個marker annotation類型,它被用作標注方法。它說明了被標注的方法重載了父類的方法,起到了斷言的作用。 如果寫錯,編譯器可以檢測出哪些是錯誤的,這樣能保證你的確重寫的方法正確.
@Validated(value={})
這個注解指的是分組校驗,與BindingResult 配對出現, ModelandView 的 Model對象可以將error的信息返回給界面。
@ModelAttribute("")
注解回顯到request里面的key 處理回顯信息:
不管你輸入什么,正確都提交,錯誤都回顯,同時還可以將返回值返回給界面,最簡單的回顯跟數據類型的回顯,直接使用model.addAttribute("allErrors",allErrors); 配置圖片的虛擬目錄跟訪問路徑,tomcat雙擊->model->選在第二個add external web module
@Autowired
Spring 2.5 引入了 @Autowired 注釋,它可以對類成員變量、方法及構造函數進行標注,完成自動裝配的工作。 通過 @Autowired的使用來消除 set ,get方法。
@RequestMapping("fileUpload")
注解為控制器指定可以處理哪些特定的 URL 請求。
@ApiOperation和@ApiParam
@ApiOperation(value = “接口說明”, httpMethod = “接口請求方式”, response= “接口返回參數類型”, notes = “接口發布說明”;其他參數可參考源碼,不是spring自帶的注解,而是swagger里com.wordnik.swagger.annotations.ApiOperation;
@ApiParam(required = “是否必須參數”, name = “參數名稱”, value = “參數具 體描述”。
@Api
修飾整個類,描述Controller的作用。
@ApiOperation
描述一個類的一個方法,或者說一個接口。
@ApiModel
用Model對象來接收參數。
@ApiParam
@ApiParam(value = "token", required = true) @RequestParam String token Web前端/移動端HTTP請求方式:直接把參數附帶到URL后面,或者用AJAX方法,表單提交。
@ApiProperty
用對象接收參數時,描述對象的一個字段。
@ApiResponse
HTTP響應其中1個請求以及參數描述。
@ApiResponses
HTTP響應整體描述。
@ApiModelProperty
對象屬性 @ApiModelProperty 用在出入參數對象的字段上。
@RestController
@RestController注解是它繼承自@Controller注解。4.0之前的版本,spring MVC的組件都使用@Controller來標識當前類是一個控制器servlet。 使用這個特性,我們可以開發REST服務的時候不需要使用@Controller而專門的@RestController。 注解本身使用@Controller和@ResponseBody注解。使用了這個注解的類會被看作一個controller使用@RequestMapping的方法自己還有一個默認的@ResponseBody注解。
@Api 用於controller類上 用於協議集描述
@ApiOperation 用在controller的方法上 用於協議集描述
@ApiResponses 用在controller的方法上 屬於Response集
@ApiResponse 用在 @ApiResponses里邊 屬於Response集
@ApiImplicitParams 用在controller的方法上 屬於非對象參數集
@ApiImplicitParam 用在@ApiImplicitParams的方法里邊 屬於非對象參數集
@ApiModel 用在返回對象類上 描述返回對象的意義
@component
把普通pojo實例化到spring容器中,相當於配置文件中的<bean id="" class=""/>
@RequestBody
該注解用於讀取Request請求的body部分數據,使用系統默認配置的HttpMessageConverter進行解析,然后把相應的數據綁定到要返回的對象上 ,再把HttpMessageConverter返回的對象數據綁定到 controller中方法的參數上
@Data
注解在類上, 為類提供讀寫屬性, 此外還提供了 equals()、hashCode()、toString() 方法
@Builder
注解在類上, 為類提供一個內部的 Builder
@Synchronized
注解在方法上, 為方法提供同步鎖
@Log4j
注解在類上, 為類提供一個屬性名為 log 的 log4j 的日志對象
@Slf4j
注解在類上, 為類提供一個屬性名為 log 的 log4j 的日志對象
@Service
用於標注業務層組件
@Controller
用於標注控制層組件(如struts中的action)
@Repository
用於標注數據訪問組件,即DAO組件
@Component
泛指組件,當組件不好歸類的時候,我們可以使用這個注解進行標注。
@Autowired
@Qualifier("chinese") 當接口存在兩個實現類的時候必須使用@Qualifier指定注入哪個實現類,否則可以省略,只寫@Autowired。 <mvc:annocation-driven/>注解形式的可以不用配置json轉換器,直接使用 @ResponseBody注解 可以設置json跟Bean 之間的轉換 : 該注解用於將Controller的方法返回的對象,通過適當的HttpMessageConverter轉換為指定格式后,寫入到Response對象的body數據區
@ModelAttribute
在方法定義上使用 @ModelAttribute 注解:Spring MVC 在調用目標處理方法前,會先逐個調用在方法級上標注了@ModelAttribute的方法,在方法的入參前使用
@ModelAttribute 注解:可以從隱含對象中獲取隱含的模型數據中獲取對象,再將請求參數 –綁定到對象中,再傳入入參將方法入參對象添加到模型中
@RequestParam
在處理方法入參處使用 @RequestParam 可以把請求參 數傳遞給請求方法
@PathVariable
綁定 URL 占位符到入參
@ExceptionHandler
注解到方法上,出現異常時會執行該方法
@ControllerAdvice
使一個Contoller成為全局的異常處理類,類中用@ExceptionHandler方法注解的方法可以處理所有Controller發生的異常
@ResponseBody
該注解用於將Controller的方法返回的對象,通過適當的HttpMessageConverter轉換為指定格式后,寫入到Response對象的body數據區。 使用時機: 返回的數據不是html標簽的頁面,而是其他某種格式的數據時(如json、xml等)使用當我們在Controller上標注了@RestController,這樣相當於Controller的所有方法都標注了@ResponseBody
@responseBody注解的作用是將controller的方法返回的對象通過適當的轉換器轉換為指定的格式之后,寫入到response對象的body區,通常用來返回JSON數據或者是XML數據,需要注意的呢,在使用此注解之后不會再走試圖處理器,而是直接將數據寫入到輸入流中,他的效果等同於通過response對象輸出指定格式的數據。
@RequestMapping("/login")
@ResponseBody
public User login(User user){
return user;
}
User字段:userName pwd
那么在前台接收到的數據為:'{"userName":"xxx","pwd":"xxx"}'
效果等同於如下代碼:
@RequestMapping("/login")
public void login(User user, HttpServletResponse response){
response.getWriter.write(JSONObject.fromObject(user).toString());
}
細節:
Google的一個json的jar包,隨時將對象封裝json返回。
Gson gson = new Gson(); String json = gson.toJson(對象);
@Param
1,使用@Param注解 當以下面的方式進行寫SQL語句時: @Select("select column from table where userid = #{userid} ") public int selectColumn(int userid); 當你使用了使用@Param注解來聲明參數時,如果使用 #{} 或 ${} 的方式都可以。 @Select("select column from table where userid = ${userid} ") public int selectColumn(@Param("userid") int userid); 當你不使用@Param注解來聲明參數時,必須使用使用 #{}方式。如果使用 ${} 的方式,會報錯。 @Select("select column from table where userid = ${userid} ") public int selectColumn(@Param("userid") int userid); 2,不使用@Param注解 不使用@Param注解時,參數只能有一個,並且是Javabean。在SQL語句里可以引用JavaBean的屬性,而且只能引用JavaBean的屬性。 // 這里id是user的屬性 @Select("SELECT * from Table where id = ${id}") Enchashment selectUserById(User user);
《憶》
華麗的服裝
柔美的線條
只為證明你來過
微笑的表情
脆弱的生命
只為暗示你還活着
在千里之外的你
耳語的是什么
床前的燈
透漏着些什么
路邊的人群
又在低頭思索哪一個
從前的你我
千年以后還記得住什么
看見過奔騰的沙漠
體會過無聲的黃河
感受時間的盡頭
重現惡魔的夢魘
快樂漫漫星空
悲傷縷縷光芒
黑夜與黎明的交替
是善與惡的更迭
冰與火的重生
美輪美奐
只為意