當前位置:編程學習大全網 - 源碼下載 - springBoot @RequestBody 寫在方法上與寫在參數上的區別?

springBoot @RequestBody 寫在方法上與寫在參數上的區別?

1. @Controller

控制層組件,定義壹個springMVC的控制器類,往往需要和@RequestMapping配合使用。

2. @RestController

相當於@ResponseBody+@Controller合在壹起的作用。

3. @Service

服務層組件,用於標註業務層組件,表示定義壹個bean,自動根據bean的類名實例化壹個首寫字母為小寫的bean,也可以指定bean的名稱:@Service(“beanName”)。

4. @Repository

持久層組件,用於標註數據訪問組件,即DAO組件。

5. @Component

把普通pojo實例化到spring容器中,相當於配置文件中的 <bean id="" class=""/>。

6. @RequestMapping

用於配置控制層的訪問URL,可以用在控制器類上和控制器方法上,如果用在控制器類上,則訪問類中的方法是要加上類上的路徑,例如:

@Controller

@RequestMapping("/personal/linkInfo")

public class LinkInfoController {

@RequestMapping(value = "/addLinkInfo")

public String addLinkInfo(LinkInfoReq linkInfoReq) {

linkInfoService.addLinkInfo(linkInfoReq);

return "redirect:/personal/linkInfo/toLinkInfo";

}

}

上述代碼的訪問路徑就是XXX/personal/linkInfo/addLinkInfo。

@RequestMapping源代碼如下圖:

a) value:設置訪問的URL,數組,可以將多個請求映射到壹個方法上去。支持通配符配置

代碼示例:

@RequestMapping(value = {"/page","/page*"})

public void getInfo() {

}

上述代碼訪問路徑可以是:XXX/page,XXX/pageadc等滿足value條件的路徑。

b) method:設置訪問的方法,數組,可是設置多個訪問方法映射到同壹個方法上,默認為GET方法

代碼示例:

@RequestMapping(value = "/page", method = RequestMethod.POST)

public void getInfo() {

}

上述代碼 /page路徑就只能用POST方法才能請求。

method的可選值有GET,HEAD, POST, PUT, PATCH, DELETE, OPTIONS, TRACE。

c) params:指定request中必須包含某些參數值是,才讓該方法處理。數組。

@RequestMapping(value = "/page", params = {"type=1"})

public void getInfo() {

}

上述代碼/page路徑只有請求參數中包含type且值等於1時才能訪問該方法。

d) headers:指定request中必須包含某些指定的header值,才能讓該方法處理請求。數組。

示例代碼:

@RequestMapping(value = "/page", headers = {" content-type=text/plain " })

public void getInfo() {

}

上述代碼/page路徑只有headers中content-type=text/plain才能訪問該方法。

e) consumes:指定處理請求的提交內容類型(Content-Type),例如application/json, text/html。

f) produces:指定返回的內容類型,僅當request請求頭中的(Accept)類型中包含該指定類型才返回。

7. @ResponseBody

通常使用在controller方法上,作用是將方法的返回值通過合適的HttpMessageConverter轉換成特定格式寫入到response的body區域,然後返回給客戶端,如果沒有使用@RequestBody註解,方法返回值將會封裝到ModelAndView並解析返回視圖。

8. @RequestParam

接受的參數來自requestHeader,即請求頭,用來接收GET和POST請求參數並將參數賦值到被@RequestParam註解的變量上,同樣可以使用requet.getParameter(“name”)獲取,默認的參數接受方式,如果controller方法的參數未使用@RequestParam,則默認也是使用@RequestParam接受參數。用來處理Content-Type: 為 application/x-www-form-urlencoded編碼的內容。

@RequestParam有三個配置參數:

a) required:是否必須,默認true,必須。

b) defaultValue:默認值,請求的參數為空時使用默認值。

c) value:請求的參數名。

9. @RequestBody

接受的參數來自requestBody,即請求體,壹般用於處理非 Content-Type: application/x-www-form-urlencoded編碼格式的數據,比如:application/json、application/xml等類型的數據。

10. @Autowired

它可以對類成員變量,方法及構造函數進行標註,完成自動裝配工作,可以消除set,get方法。

11. @Resource

其作用和@Autowired相似。

不同點:

@Resource是Java自己的註解,@Resource有兩個屬性重要屬性,分是name和type;Spring將@Resource註解的name屬性解析為bean的名字,而type屬性則解析為bean的類型。所以如果使用name屬性,則使用byName的自動註入策略,而使用type屬性時則使用byType自動註入策略。如果既不指定name也不指定type屬性,這時將通過反射機制使用byName自動註入策略。

@Autowired是spring的註解,是spring2.5版本引入的,@Autowired只根據type進行註入,不會去匹配name。如果涉及到type無法辨別註入對象時,那需要依賴@Qualifier註解壹起來修飾。

@Resource裝配順序

a) 如果同時指定了name和type,則從Spring上下文中找到唯壹匹配的bean進行裝配,找不到則拋出異常

b) 如果指定了name,則從上下文中查找名稱(id)匹配的bean進行裝配,找不到則拋出異常

c) 如果指定了type,則從上下文中找到類型匹配的唯壹bean進行裝配,找不到或者找到多個,都會拋出異常

d) 如果既沒有指定name,又沒有指定type,則自動按照byName方式進行裝配;如果沒有匹配,則回退為壹個原始類型進行匹配,如果匹配則自動裝配;

推薦使用@Resource,不用謝set方法,並且這個註解屬於java自己的,減少了與spring的耦合度。

12. @Value

該註解有兩種使用方式:

a) @Value(“${}”)

這種使用方式註入的是配置文件裏的參數

這樣配置文件中的com.title就能配置到LinkInfoController的title屬性中

b) @Value(“#{}”)

該方式表示SpEl表達式通常用來獲取bean的屬性,或者調用bean的某個方法。

這樣就可以把User對象的name配置到LinkInfoController的name屬性中。

13. @Transactional

用於配置spring事務管理。屬性信息如下:

事物的傳播行為如下:

14. @SpringBootApplication

該註解其實是壹個組合註解,源碼如下圖:

比較重要的註解有三個:

a) @SpringBootConfiguration

從源代碼可以看到@SpringBootConfiguration繼承自@Configuration,這兩個註解的功能也是壹樣的。

b) @EnableAutoConfiguration

此註釋自動載入應用程序所需的所有Bean。

c) @ComponentScan

該註解會掃描指定路徑下的的類,並將其加入到IoC容器中。在springboot中,@ComponentScan默認掃描@SpringBootApplication所在類的同級目錄以及它的子目錄。

15. @Configuration

從Spring3.0,@Configuration用於定義配置類,可替換xml配置文件,被註解的類內部包含有壹個或多個被@Bean註解的方法,這些方法將會被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext類進行掃描,並用於構建bean定義,初始化Spring容器。

16. @Bean

該註解主要用在@Configuration註解的類裏,也可以用在@Component註解的類裏。添加的bean的id為方法名。相當於配置文件裏的<bean></bean>。

@Configuration

public class RedisConfig extends CachingConfigurerSupport{

@Bean

public CacheManager cacheManager(RedisConnectionFactory connectionFactory) {

RedisCacheManager redisCacheManager = RedisCacheManager.create(connectionFactory);

return redisCacheManager;

}

}

如上代碼就相當於在xml文件裏配置:

<beans>

<bean id=" cacheManager " class=" com.mypage.config. RedisCacheManager "/>

</beans>

17. @MapperScan

指定要變成實現類的接口所在的包,然後包下面的所有接口在編譯之後都會生成相應的實現類添加位置:是在Springboot啟動類上面添加:

18. @EnableCaching

該註解是spring framework中的註解驅動的緩存管理功能。自spring版本3.1起加入了該註解。如果妳使用了這個註解,那麽妳就不需要在XML文件中配置cache manager了。

@Configuration

@EnableCaching

public class RedisConfig extends CachingConfigurerSupport{

/**

* 采用RedisCacheManager作為緩存管理器

* @param connectionFactory

* @return

*/

@Bean

public CacheManager cacheManager(RedisConnectionFactory connectionFactory) {

RedisCacheManager redisCacheManager = RedisCacheManager.create(connectionFactory);

return redisCacheManager;

}

}

19. @EnableRedisHttpSession

用來設置springboot使用redis存儲session,該註解會創建壹個名字叫springSessionRepositoryFilter的Spring Bean,其實就是壹個Filter,這個Filter負責用Spring Session來替換原先的默認HttpSession實現。

示例代碼如下:

@Configuration

@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 60*30)

public class HttpSessionConfig {

}

其中屬性maxInactiveIntervalInSeconds是設置session的有效時間,單位毫秒,默認1800ms。

但其實這樣還是不夠的,還要在配置文件中設置redis存儲session:

spring.session.store-type=redis

這樣就可以了。

  • 上一篇:檢查分數源代碼
  • 下一篇:管理系統應用程序源代碼
  • copyright 2024編程學習大全網