簡體   English   中英

Jersey 2.29.1 響應編碼問題,AWS Api Gateway+ AWS Lambda +Scala

[英]Jersey 2.29.1 Response Encoding Issue with AWS Api Gateway+ AWS Lambda +Scala

我在返回特殊字符(漢字)時遇到問題。 我的流程遵循 AWS API Gateway 調用 Lambda(包含 Jersey 2.29.1)

在返回響應之前,我將其打印在日志和雲監視日志中,我可以看到如下響應

{
    "names": [
    "驊威文化股份有限公司"
     ]
}

但是當 API 返回的響應如下(在 ISO-8859-1 中編碼)

{
    "names": [
    "éªå¨æåè¡ä»½æéå¬å¸"
     ]
}

我用來返回響應的代碼是

return Response.status(200).header("Access-Control-Allow-Origin", "*").entity(gson.toJson(response)).build()

使用這些對返回方法的注釋

@Consumes(Array(MediaType.APPLICATION_JSON))
@Produces(Array(MediaType.APPLICATION_JSON))

我已經嘗試了社區博客中提到的所有選項,例如更改注釋以在生產注釋中添加“UTF-8”字符串,如@Produces(Array(MediaType.APPLICATION_JSON + ";charset=UTF-8")) 在我使用的響應構建器代碼中添加 Content-Type 標頭是return Response.status(200).encoding("UTF-8").header("Access-Control-Allow-Origin", "*").entity(gson.toJson(response)).build()

在此之后,我克隆了jersey repo並查看了它使用的默認編碼是“ISO-8859-1”的代碼。 在這里你可以看到 org.glassfish.jersey.jdk.connector.internal.HttpParser 的第 32 行包含private static final String ENCODING = "ISO-8859-1";

有沒有辦法設置一些屬性或添加一些自定義過濾器,以便我可以更新此編碼以使用 UTF-8 並獲得正確的響應?

你有沒有在你的 lambda 處理程序中嘗試過這個?

LambdaContainerHandler.getContainerConfig().setDefaultContentCharset("UTF-8");

參考

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM