2019-04-11——DAY1
使用了Lombok的@Data注解之后的代碼樣式,我們可以看出來第二個圖中我們省去了Get,Set 還有ToString方法等等的實現(xiàn)代碼快,全部收斂成一個@Data注解,這樣代碼就整潔了很多。

2019-04-12——DAY2
注解怎么用

@ApiOperation(value = "用戶信息列表",notes = "所有用戶列表")
完成了簡單增刪查改代碼編寫,用了postman插件get和post測試,了解了一點注釋怎么用,SwaggerUI生成接口文檔。報了錯,解決不了。。。┭┮﹏┭┮改不出來,很不明白。
2019-04-15——DAY3
@GetMapping("/list")
@ApiOperation(value = "用戶信息列表",notes = "所有用戶列表")
@ResponseBody
public DynamicBean selectAll(){
DynamicBean bean = new DynamicBean();
bean.put("uerList",userService.selectAll());
return bean;
}
要學(xué)一下常用的注解的用法
@ResponseBody的作用其實是將java對象轉(zhuǎn)為json格式的數(shù)據(jù)。
DynamicBean,因為只需要返回數(shù)據(jù),不需要返回視圖,所以一般都用這個類,他繼承自map,注意一下他的方法,用put放進(jìn)去。
注意出現(xiàn)時間或某個字段為null的問題

這種時間為null,要么是格式有問題,要么是SQL、語句不對,我寫了
select * from dg_user
不行,要寫全
select id,name,create_time createTime,modify_time modifyTime from dg_user
才能查到時間,因為id和name可以和user類里面定義的變量名一樣,而兩個時間定義的名字不一樣了。。所以不行。
下午寫了一個文件上傳的controller。。過程艱辛(不過全程自己查百度,哎他們太忙了)
文件上傳:MultipartFile 通過 MultipartFile .transferTo( new File()), 僅需要這步驟,就可以把圖片存到服務(wù)器所在的電腦的任意一個盤或者路徑里面。
MultipartFile需要配置,于是寫了一個springmvc.xml里面貼上了
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="209715200"/>
<property name="defaultEncoding" value="UTF-8"/>
<property name="resolveLazily" value="true"/>
</bean>
主要是配置最大文件單個和總共不能超過多大等等等

其中,@controller:
在SpringMVC 中,控制器Controller 負(fù)責(zé)處理由DispatcherServlet 分發(fā)的請求,它把用戶請求的數(shù)據(jù)經(jīng)過業(yè)務(wù)處理層處理之后封裝成一個Model ,然后再把該Model 返回給對應(yīng)的View 進(jìn)行展示。在SpringMVC 中提供了一個非常簡便的定義Controller 的方法,你無需繼承特定的類或?qū)崿F(xiàn)特定的接口,只需使用@Controller 標(biāo)記一個類是Controller ,然后使用@RequestMapping 和@RequestParam 等一些注解用以定義URL 請求和Controller 方法之間的映射,這樣的Controller 就能被外界訪問到。
一開始沒有寫get的請求方法,就報錯了,說啥啥的,我就查到他先是查get的巴拉巴拉就,于是可以從get的return到post、上就可以了。
分隔符“/”"", 統(tǒng)一使用了 File.seperator() 來代替
還有一直傳不上去文件,因為

這里沒有寫 file

這是因為:在上傳文件的時候指定的key與@RequestParam中要求的不一致,導(dǎo)致了后臺不能獲取到上傳的文件。
@RequestParam用于將請求參數(shù)區(qū)數(shù)據(jù)映射到功能處理方法的參數(shù)上。
就這樣吧 ,明天再寫
2019-04-16 DAY4
接收請求參數(shù)的方式:3種 包括@RequestParam的用法
@RequestParam(value="username") String userName, @RequestParam(value="usernick") String userNick //value中的參數(shù)名稱要跟name中參數(shù)名稱一致
String username, String usernick// 此時要參數(shù)名稱一致
HttpServletRequest request //request.getParameter("usernick")
@RequestBody:處理HttpEntity傳遞過來的數(shù)據(jù),一般用來處理非Content-Type: application/x-www-form-urlencoded編碼格式的數(shù)據(jù)。
@RequestBody注解可以接收json格式的數(shù)據(jù),并將其轉(zhuǎn)換成對應(yīng)的數(shù)據(jù)類型。
GET請求中,因為沒有HttpEntity,所以@RequestBody并不適用。
POST請求中,通過HttpEntity傳遞的參數(shù),必須要在請求頭中聲明數(shù)據(jù)的類型Content-Type,SpringMVC通過使用HandlerAdapter 配置的HttpMessageConverters來解析HttpEntity中的數(shù)據(jù),然后綁定到相應(yīng)的bean上。
@RequestBody用于post請求,不能用于get請求
這里涉及到使用@RequestBody接收不同的對象
- 創(chuàng)建一個新的entity,將兩個entity都進(jìn)去。這是最簡單的,但是不夠“優(yōu)雅”。
- 用Map<String, Object>接受request body,自己反序列化到各個entity中。
-
類似方法2,不過更為generic,實現(xiàn)自己的HandlerMethodArgumentResolver。
image.png
@ModelAttribute注解類型將參數(shù)綁定到Model對象

當(dāng)前臺界面使用GET或POST方式提交數(shù)據(jù)時,數(shù)據(jù)編碼格式由請求頭的ContentType指定。分為以下幾種情況:
- application/x-www-form-urlencoded,這種情況的數(shù)據(jù)@RequestParam、@ModelAttribute可以處理,@RequestBody也可以處理。
- multipart/form-data,@RequestBody不能處理這種格式的數(shù)據(jù)。(form表單里面有文件上傳時,必須要指定enctype屬性值為multipart/form-data,意思是以二進(jìn)制流的形式傳輸文件。)
- application/json、application/xml等格式的數(shù)據(jù),必須使用@RequestBody來處理。
@RequestParam get和post傳值都可以
@RequestBody @ModelAttribute 只能post傳值
@ResponseBody:直接返回 json 數(shù)據(jù)。不會跳轉(zhuǎn)
在使用 @RequestMapping后,返回值通常解析為跳轉(zhuǎn)路徑,但是加上 @ResponseBody 后返回結(jié)果不會被解析為跳轉(zhuǎn)路徑,而是直接寫入 HTTP response body 中。 比如異步獲取 json 數(shù)據(jù),加上 @ResponseBody 后,會直接返回 json 數(shù)據(jù)。@RequestBody 將 HTTP 請求正文插入方法中,使用適合的 HttpMessageConverter 將請求體寫入某個對象。
類似:一般就用DynamicBean 只返回json (不返回view的話,不用modelandview)
@RestController注解相當(dāng)于@ResponseBody + @Controller合在一起的作用。
@ResponseBody
public DynamicBean selectAll(){
DynamicBean bean = new DynamicBean();
bean.put("uerList",userService.selectAll());
return bean;
}
@PathVariable
@RequestMapping("/users/{username}")
@ResponseBody
public String userProfile(@PathVariable("username") String username){
// return String.format("user %s", username);
return "user" + username;
}
初步認(rèn)識JWT
下列場景中使用JSON Web Token是很有用的:
Authorization (授權(quán)) : 這是使用JWT的最常見場景。一旦用戶登錄,后續(xù)每個請求都將包含JWT,允許用戶訪問該令牌允許的路由、服務(wù)和資源。單點登錄是現(xiàn)在廣泛使用的JWT的一個特性,因為它的開銷很小,并且可以輕松地跨域使用。
Information Exchange (信息交換) : 對于安全的在各方之間傳輸信息而言,JSON Web Tokens無疑是一種很好的方式。因為JWTs可以被簽名,例如,用公鑰/私鑰對,你可以確定發(fā)送人就是它們所說的那個人。另外,由于簽名是使用頭和有效負(fù)載計算的,您還可以驗證內(nèi)容沒有被篡改。
基于token機(jī)制的身份認(rèn)證
使用token機(jī)制的身份驗證方法,在服務(wù)器端不需要存儲用戶的登錄記錄。大概的流程:
客戶端使用用戶名和密碼請求登錄。服務(wù)端收到請求,驗證用戶名和密碼。驗證成功后,服務(wù)端會生成一個token,然后把這個token發(fā)送給客戶端??蛻舳耸盏絫oken后把它存儲起來,可以放在cookie或者Local Storage(本地存儲)里??蛻舳嗣看蜗蚍?wù)端發(fā)送請求的時候都需要帶上服務(wù)端發(fā)給的token。服務(wù)端收到請求,然后去驗證客戶端請求里面帶著token,如果驗證成功,就向客戶端返回請求的數(shù)據(jù)。
https://blog.csdn.net/daimengs/article/details/81088172
2019-04-18 DAY5
(新的一天新的發(fā)現(xiàn),我買了一個電腦支架,用起來好爽!bang!這臺電腦的觸摸板真的爛的一批。
好了,剛剛又去問了一下善良的某某哥。)
1、了解了項目之間怎么跳來跳去。2、還有sql語句還可以,直接用方法。下面是舉例子。

在authcontroller中去屌merchantclient服務(wù)中的這個方法,我們可以通過按住ctrl鍵跳到

這個服務(wù)的接口(因為是微服務(wù)?)然后通過這個路徑,按兩下shrift,查找這個服務(wù)下的這個接口。



具體實現(xiàn)就在這個位置?!?br> (剛剛解決了qq截圖熱鍵沖突,誰能想到是網(wǎng)易云呢。。)

類似這種sql方法。
怎么找路徑



UUID.randomUUID().toString() 的作用:java-生成唯一的序列
UUID.randomUUID().toString()是javaJDK提供的一個自動生成主鍵的方法。
UUID(Universally Unique Identifier)全局唯一標(biāo)識符,是指在一臺機(jī)器上生成的數(shù)字,它保證對在同一時空中的所有機(jī)器都是唯一的,是由一個十六位的數(shù)字組成,表現(xiàn)出來的 形式。由以下幾部分的組合:當(dāng)前日期和時間(UUID的第一個部分與時間有關(guān),如果你在生成一個UUID之后,過幾秒又生成一個UUID,則第一個部分不 同,其余相同),時鐘序列,全局唯一的IEEE機(jī)器識別號(如果有網(wǎng)卡,從網(wǎng)卡獲得,沒有網(wǎng)卡以其他方式獲得),UUID的唯一缺陷在于生成的結(jié)果串會比較長。

在java中String一個String類型的可變長度的數(shù)組,固定長度的數(shù)組是String[] str={};這樣寫,可變的就String... str.
select(String... fields) fields是字段的意思
睡了15min。。還是很困很困,感覺直接看項目代碼好吃力,看不懂,注釋很少,啊啊啊,這樣感覺進(jìn)步不大。
好無聊,我要無聊死了,無聊無聊,為神馬不下大雨,好熱好熱啊啊啊啊啊 好無聊啊嗚嗚嗚嗚想吃好吃的,天哪我再也不要點輕食了,不好吃不好吃,雞肉不知道怎么做的,這么難吃也是服了。嘟嘟嘟嘟嘟嘟嘟嘟嘟他們工作都不用休息一下的嗎
