jackson 字段動態(tài)過濾
https://github.com/bohnman/squiggly-filter-jackson
https://github.com/narusas/SpringMvcJacksonFilter
https://github.com/shihyuho/jackson-dynamic-filter
使用AOP;自己定義注解,然后在返回的時候加上需要過濾的字段.
切面到自己定義的注解上,然后使用上面的工具,我自己使用 https://github.com/bohnman/sq...
這是我的工具類
https://github.com/yujunhao8831/spring-boot-start-current/blob/master/aidijing-common/src/main/java/com/aidijing/common/util/JsonUtils.java
實現(xiàn) ResponseBodyAdvice<T> 接口,如果這樣,那么就需要使用統(tǒng)一的返回值類型,把之前的返回值包裝起來.
這樣在Spring Response 寫出去之前,你可以對這些數(shù)據(jù)進行處理,還是使用jackson的過濾特性.
我之前就是這樣做的, https://github.com/yujunhao88... 你可以參考下
返回之前就立馬進行過濾.
我之后準(zhǔn)備采用這個, https://github.com/yujunhao88...
你可以參考下,不過這不是最終的,還在完善中
因為復(fù)制的時候要保留當(dāng)前項目的包結(jié)構(gòu),例如你把一個包com.google.xxx,復(fù)制到自己的項目com.abc.example里,復(fù)制過來的包應(yīng)該是com.abc.example.xxx,而不可能是com.abc.example.com.google.xxx,而當(dāng)前項目的包沒有那么多前綴的話,那就只保留xxx的名字了,當(dāng)然你可以自己把當(dāng)前項目的包名改成com.google,直接在包文件夾上右擊refactor->rename就可以了
Service調(diào)用其他ORM層怎么了,要不分層還有什么意義,直接去掉Service不行了
看了下頁面主機是Nginx,方便的話改下配置,用反向代理的方式會比前端折騰跨域省事的多。
試試 <dubbo:reference id="tjcount" interface="com.dcits.jk.TJCount" mock="com.foo.bar.TJCountMock"/>
定義一個struct
type Param struct {
UserId int `json:"userid"`
Username string `json:"username,omitempty"`
Userpass string `json:"userpass,omitempty"`
}
var v Param
json.Unmarshal(c.Ctx.Input.RequestBody, &v)你把change方法里的str = "test ok";換成this.str = "test ok";感受一下?
另一個頁面中用$.cookie('token')取,但是一直是undefined。
基本上,就是一個過期的cookie。
打開開發(fā)者工具,選擇Application,選中你要讀取的cookie,查看Expires。
一般是2,作為一個第三方支付,是需要避免被跨域腳本攻擊的,如果你使用的第三方服務(wù)是區(qū)分測試環(huán)境和生產(chǎn)環(huán)境的(一般都是很老的系統(tǒng)),localhost有時候會被當(dāng)成調(diào)試用,并且這類型的服務(wù)都是不允許前端跳轉(zhuǎn)的。
現(xiàn)在一般的支付系統(tǒng)都不再區(qū)分測試和生產(chǎn)環(huán)境,開發(fā)調(diào)試也必須在生產(chǎn)環(huán)境中獲得完整授權(quán),比如localhost也需要在你自己的后臺進行授權(quán)。
控制臺有報錯的,這個api沒有設(shè)置允許跨域,可以后端轉(zhuǎn)發(fā)
建議你了解下js跨域相關(guān)的知識
$.get('https://way.jd.com/jisuapi/newSearch?keyword=taobao&appkey=68b4fd6acabbe498b29fdc67d3f23203',function(response){console.log(response);});
建議使用Path類操作文件,涉及文件監(jiān)聽事件、文件權(quán)限等高級特性
下面是隨便在博客上找的,東西比較雜,還需要你自己看API
package filespaths;
import org.junit.Test;
import java.io.*;
import java.net.URI;
import java.nio.charset.StandardCharsets;
import java.nio.file.FileSystems;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.attribute.PosixFilePermission;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.stream.Stream;
/**
* @Author kingboy
* @Date 2017/4/13 11:05
* @Description Path is used to Path Sample
* @email kingboyworld@163.com
*/
public class PathTest {
private static String separator = File.separator;
/**
* 構(gòu)建Path
*/
@Test
public void constructon(){
//1.Paths
Path path = Paths.get("/Users/kingboy/Desktop/");
Path path1 = Paths.get(URI.create("/Users/kingboy/Desktop/"));
//2.FileSystems
Path path2 = FileSystems.getDefault().getPath("/Users/kingboy/Desktop/");
//3.File
Path path3 = new File("/Users/kingboy/Desktop/").toPath();
}
/**
* 創(chuàng)建一個空文件/文件夾
* @throws IOException
*/
@Test
public void create() throws IOException {
//文件夾
Path path = Paths.get("/Users/kingboy/Desktop/hello");
if(!Files.exists(path)){
Files.createDirectory(path);
//創(chuàng)建多個目錄
//Files.createDirectories(path);
}
//文件
Path path1 = Paths.get("/Users/kingboy/Desktop/helloFile");
if(Files.exists(path1)){
Files.createFile(path1);
}
}
/**
* 文件屬性
*/
@Test
public void getFileProperties() throws IOException {
Path path = Paths.get("/Users/kingboy/Desktop/text.txt");
System.out.println(Files.getLastModifiedTime(path));//最后修改時間
System.out.println(Files.getOwner(path));//擁有者
System.out.println(Files.getPosixFilePermissions(path));//權(quán)限
System.out.println(Files.size(path));//文件大小
}
/**
* 讀取一個文本文件
*/
@Test
public void readText() throws IOException {
Path path = Paths.get("/Users/kingboy/Desktop/text.txt");
//通過bufferedReader讀取
BufferedReader bufferedReader = Files.newBufferedReader(path, StandardCharsets.UTF_8);//文件編碼
StringBuilder sb = new StringBuilder();
String tempString = null;
while ((tempString = bufferedReader.readLine())!=null){
sb = sb.append(tempString);
}
System.out.println(sb);
//通過Files方法readAllLines
List<String> strings = Files.readAllLines(path);
strings.forEach(s -> System.out.print(s));
//輸出結(jié)果
//adsfasdfasdfadsfasdfgsdfsdffsdfsdf
//adsfasdfasdfadsfasdfgsdfsdffsdfsdf
}
/**
* 拿到文件輸入流
* @throws IOException
*/
@Test
public void getInputStream() throws IOException {
Path path = Paths.get("/Users/kingboy/Desktop/text.txt");
InputStream inputStream = Files.newInputStream(path);
}
/**
* 文件寫操作
*/
@Test
public void writeFile() throws IOException {
Path path = Paths.get("/Users/kingboy/Desktop/writeFile");
BufferedWriter bufferedWriter = Files.newBufferedWriter(path);
String str = "write file test";
bufferedWriter.write(str);
bufferedWriter.flush();
bufferedWriter.close();
}
/**
* 遍歷一個文件夾
*/
@Test
public void traverseDirectory() throws IOException {
Path path = Paths.get("/Users/kingboy/Desktop/");
Stream<Path> list = Files.list(path);
list.forEach(p -> {
System.out.println(p.getFileName());
});
}
/**
* 遍歷文件樹
*/
@Test
public void traverseTree() throws IOException {
Path path = Paths.get("/Users/kingboy/Desktop/");
Stream<Path> walk = Files.walk(path);
walk.forEach(path1 -> {
// System.out.println(path1.getRoot());//根目錄
System.out.println(path1.getFileName());//文件名
// System.out.println(path1.getParent());//上級目錄
// System.out.println(path1.getFileSystem());//文件系統(tǒng)
});
//還有種方式Files.walkFileTree()
}
/**
* 文件復(fù)制
*/
@Test
public void copyFile() throws IOException {
Path path = Paths.get("/Users/kingboy/Desktop/text.txt");
Path path2 = Paths.get("/Users/kingboy/Desktop/hello.txt");
Files.copy(path,path2);
}
/**
* 讀取權(quán)限見上面示例,設(shè)置權(quán)限
*/
@Test
public void writePermission() throws IOException {
Path path = Paths.get("/Users/kingboy/Desktop/text.txt");
Set<PosixFilePermission> permissionSet = new HashSet<>();
permissionSet.add(PosixFilePermission.GROUP_WRITE);
permissionSet.add(PosixFilePermission.OWNER_EXECUTE);
Files.setPosixFilePermissions(path,permissionSet);
}
//還有很多其他操作Api,自己查看方法名,很容易就能分辨出功能。
}背景
目前項目中會使用了Iaas中的vm,所有操作都是通過ssh連上去的。pm表示要不要寫個agent在里面用,現(xiàn)在每次操作都ssh一下都很惡心。
談?wù)勎艺J(rèn)為使用ssh的好處:
代碼集中在一處,不需要分發(fā)
不需要維護agent這么一個進程的生命周期,以及檢測它的心跳
缺點:
不支持異步
我想問的問題
ssh的開銷大嗎?在我看來似乎和寫一個基于web server 的agent差不多
大家一般是如何選型的?為什么這么選?
這個東西以前做過類似的,也有過反思,甚至設(shè)計的原型和你說的一模一樣。
例如,我為什么要用基于web server的agent呢,我干嘛不用tcp長連接到服務(wù)端,這樣執(zhí)行的結(jié)果可以流式傳輸?shù)秸{(diào)用方,他那邊顯示起來比較平滑,不用每個命令執(zhí)行完等結(jié)果。
但是我這樣搞的話,中控端流量和日志存儲就成了問題了啊。
如果我的業(yè)務(wù)都在云上,如果不同機房網(wǎng)絡(luò)不互通的話,我又要蛋疼地搞點兼容的事情……
例如,agent的生命周期,為什么我要檢測她的心跳呢?機器上萬臺的話,任何可能的事情都會發(fā)生啊,修復(fù)起來太蛋疼了。但是我不處理的話……所以后面我會考慮用ssh來修復(fù)agent啊。
我假設(shè)你所有的機器都是linux,發(fā)行版為同一種。
SSH:
AGENT:
大公司有各種審計、安全方面的需求,會把這種事情統(tǒng)一到某個地方,搞個中控端,所有的批量操作必須通過中控端。模式也不一樣,有些用agent,有些用ssh,只有中控端才是必須要有的。
再說的直白點,
你是個小公司,小于30臺機器或者小于50臺機器的話,不建議考慮agent模式。
沒那個需求,投入的成本大而收效低。
基于各種第三方框架包裝一個就好了嘛,嫌麻煩就ansible用起。
可以使用org.apache.poi庫,具體的細節(jié)還是自己查文檔,畢竟我也沒實操過
UI不美觀,你可以把input隱藏,用js觸發(fā),頁面上用其他元素做樣式,應(yīng)該可以
2make 是用來編譯的,它從Makefile中讀取指令,然后編譯。
3make install是用來安裝的,它也從Makefile中讀取指令,安裝到指定的位置。
直接用android studio不行嗎?
同樣的程序,mac未拋出異常,正常執(zhí)行3分鐘收到數(shù)據(jù)
https://docs.python.org/2.7/l...
看看你客戶端的timeout默認(rèn)是None么,可能版本不同
python 2.7.10
api中,你不應(yīng)該暴露key和加密方法到客戶端,你應(yīng)該采用https + 用戶token的方式訪問你后端接口
一種在工作中實踐過的可行解決方案:
status),status表明執(zhí)行到的階段,比如B事務(wù)完成后,將此字段置為B,C事務(wù)完成后,將此字段置為Cstatus,前端就能知道目前執(zhí)行到哪個階段了如果覺得這種方案不太優(yōu)雅,可以考慮websocket
Canvas
SVG
北大青鳥APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
達內(nèi)教育集團成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機構(gòu),是中國一站式人才培養(yǎng)平臺、一站式人才輸送平臺。2014年4月3日在美國成功上市,融資1
北大課工場是北京大學(xué)校辦產(chǎn)業(yè)為響應(yīng)國家深化產(chǎn)教融合/校企合作的政策,積極推進“中國制造2025”,實現(xiàn)中華民族偉大復(fù)興的升級產(chǎn)業(yè)鏈。利用北京大學(xué)優(yōu)質(zhì)教育資源及背
博為峰,中國職業(yè)人才培訓(xùn)領(lǐng)域的先行者
曾工作于聯(lián)想擔(dān)任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項目經(jīng)理從事移動互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍懿科技有限責(zé)任公司從事總經(jīng)理職務(wù)負(fù)責(zé)iOS教學(xué)及管理工作。
浪潮集團項目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺面向?qū)ο箝_發(fā)經(jīng)驗,技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點難點突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開發(fā)經(jīng)驗。曾經(jīng)歷任德國Software AG 技術(shù)顧問,美國Dachieve 系統(tǒng)架構(gòu)師,美國AngelEngineers Inc. 系統(tǒng)架構(gòu)師。