我有休息服務(約100個端點),用JAX-RS Jersey實現。它們都有返回類型「application/json」,它可能包含一些html和javascript代碼,爲此我需要轉義,例如,「<」應該變爲<
。轉義函數很容易,並且有一些庫。JAX-RS WHERE逃避響應主體
麻煩的是,我無法在代碼中找到應該轉義的地方。 我創建這樣的響應:
public Response response(int response, URI location, Object entity) {
Response.ResponseBuilder builder =
Response.status(response)
.location(location)
.entity(entity);
}
而且,我創建的過濾器象下面這樣:
@Provider
public class ResponseFilter implements ContainerResponseFilter {
@Override
public void filter(ContainerRequestContext requestContext,
ContainerResponseContext responseContext)
throws IOException
{
Object entity = responseContext.getEntity();
}
}
Object entity
可以是不同類的。 我相信,當Jersey將這個對象實體變成JSON字符串時,我需要知道,以便我可以轉義那個JSON字符串。 不過,現在我所有的是Object entity
,我不知道如何逃避它。
我正在考慮做entity.toString(),然後轉義該字符串並將其設置爲實體。但是,我不確定Jersey是否使用toString()方法將entity
轉換爲JSON。
================ 實施例:
public class Person{
private long id;
private String name;
private String description;
}
實際響應:
{"id": 1234,
"name": "John Doe",
"description": "<script> Some javascript code </script>"}
預期響應:
{"id": 1234,
"name": "John Doe",
"description": "<script> Some javascript code </script<"}
你不需要轉義任何東西。 JSON編組器,將您的對象轉換爲JSON,爲您做到這一點。 –
剛剛測試過。不,JSON編組人員根本不會自動轉義它。 – Simo
發佈一個包含示例屬性的示例對象,發佈您期望的輸出內容以及作爲輸出獲得的內容。作爲正確的代碼片段發佈,因爲目前,你的問題只是說:*「<」應該變成「<」*,這不是很清楚。爲了生成有效的JSON,JSON marsheller將轉義需要轉義的內容。它不會HTML轉義,XML轉義,JavaScript轉義或其他任何東西。這應該由前端完成,而不是由後端完成。 –