我有休息服务(约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转义或其他任何东西。这应该由前端完成,而不是由后端完成。 –