我在服务方法中使用了类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编码。例如,我的回复中需要'His name: John'
,而不是某个字段'His20%name%3A20%John'
的值。对于整个层次结构中的所有字段都是如此。
我没有找到比使用URLEncoder.encode(String s, String enc)方法手动处理每个字段更好的方法:
fieldValue = URLEncoder.encode(fieldValue, "UTF-8");
但在这种情况下,我需要手动浏览我的层次结构的所有对象中的所有字段作为响应。也许有更标准和更正确的方法来做到这一点?
有些字段不是字符串,例如类型为BigDecimal。它们可以包含分隔符。我该如何处理它们?在返回之前有没有办法对整个对象响应进行编码?
答案 0 :(得分:0)
您可以为编码属性创建单独的字段/ getter。这样,原始值将保持不变。您还可以依靠反射来获取所有字段,并执行比这更麻烦的字段。
@Override
public void onResume() {
super.onResume();
if (adapter != null) {
adapter = new PagerAdapter(frags);
mViewPager.setAdapter(adapter);
mViewPager.setCurrentItem(currentTabPosition);
}
}