【发布时间】:2017-09-28 10:45:02
【问题描述】:
我在服务方法中使用 javax.ws.rs.core.Response 类:
@GET
@Path("/object/{id}")
@Consumes({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
@Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
public Response findObject(@Context HttpHeaders headers,
@PathParam("id") String objectId) {
Object object = getObject(objectId);
return createResponse(object, headers);
}
private Response createResponse(Object object, HttpHeaders headers) {
Response.ResponseBuilder responseBuilder = Response
.ok()
.entity(object)
.type(MediaType.APPLICATION_JSON_TYPE)
.header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
.build();
}
我的系统的Response 内容层次结构实例包含在实例object 中。这是具有所有子对象及其属性的对象。我想在object 中编码属性值。例如,我需要在响应中给出百分比编码符号而不是名称中的空格。我需要对整个响应进行编码,包括所有字段。根据UTF-8编码。例如,我需要在我的回复中包含 'His20%name%3A20%John' 而不是某些字段的值 'His name: John'。同样,对于整个层次结构中的所有字段,无一例外。
我没有发现比使用 URLEncoder.encode(String s, String enc) 方法手动处理每个字段更好的方法:
fieldValue = URLEncoder.encode(fieldValue, "UTF-8");
但在这种情况下,我需要手动遍历层次结构中所有响应的对象中的所有字段。也许有更标准和正确的方法来做到这一点?
有些字段不是字符串,例如类型为 BigDecimal。它们可以包含分隔符。我该如何处理它们?有没有办法在返回之前对整个对象响应进行编码?
【问题讨论】:
-
您想将编码数据存储在 json 中?
-
是的,我使用 JSON 格式进行响应。
标签: java json rest jackson jax-rs