解決方案如上:
有個Springboot項目為了測試方便,模型類用中文作為字段屬性,封裝成Odata格式,在通過Springboot發布並打成jar包。
通過命令行啟動jar包里面的Springweb服務,訪問的時候開始進入服務http://desktop-6vf91n9:8080/exp.svc/ 中文字段就亂碼,通過application.properties編碼,進入服務不亂碼了。
http://desktop-6vf91n9:8080/exp.svc/Expsummaries 查看實體數據也不會亂碼了。但是其他應用調用這個數據源的時候會報錯,提示找不到中文命名的字段。后面打開元數據http://desktop-6vf91n9:8080/exp.svc/$metadata 看一下,發現元數據的中文字段還是亂碼,修改application.properties,和IDEA的項目編碼都沒用。折騰了一天,后面對比一下原有的Odata-example項目是用IDEA內置啟動測試的,再啟動試下,發現他的元數據就不亂碼。再執行這邊的jar包還是亂碼。那解決思路就是不執行jar包,通過IDEA直接執行,發現元數據竟然不亂碼了。那也就是說代碼是沒問題的,是環境的差異。網上搜索發現有類似情況的亂碼產生的原因在於 執行jar包的時候沒有制定編碼所致。
解決辦法如下
java -Dfile.encoding=utf-8 -jar abc.jar 就可以避免亂碼。(-Dfile.encoding=utf-8)