我需要根据请求参数来美化json。如果美化请求参数为真,则缩进json输出。有没有办法将此参数注入Jersey并自动缩进。
以下是我的休息服务的示例方法
@Path("/{manageElement}")
@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public Object update(@Context SecurityContext context,
@PathParam(MANAGED_ELEMENET) String manageElement, @QueryParam("prettify") boolean prettyOutput, String content) {
LOG.debug("started update.");
Request request = new Request();
request.setActionType(ActionType.UPDATE_ME);
request.setRequestBody(content);
request.setManageElement(manageElement);
request.setRequester(GENERIC_USER);
return service.service(request);
}
答案 0 :(得分:0)
我不认为使用Jersey的默认序列化器/反序列化器,您可以在创建后更改它。它在启动时注册,但您可以使用自己的序列化器/反序列化器并返回类似这样的响应。我过去主要使用Gson:
irb(main):001:0> Time.now.to_s(:db)
ArgumentError: wrong number of arguments (1 for 0)
from (irb):1:in `to_s'
from (irb):1
from C:/Ruby22/bin/irb:11:in `<main>'
在球衣示例中有一个示例,它显示了如何注册自定义提供程序,但没有指示将其更改为运行时:jersey doc
答案 1 :(得分:0)
假设您使用Jackson,您可以在ContextResolver
中配置两个不同的ObjectMapper
,并根据查询参数确定要使用的映射器。有点像this answer中所见。
链接的答案尝试获取路径参数,但要获取查询参数,只需使用
String param = uriInfo.getQueryParameters().getFirst("prettify");
if (param != null) {
boolean prettify = Boolean.valueOf(param);
if (prettify) return prettifyMapper;
}
return regularMapper;
要使用Jackson获取格式化输出,具体取决于您可以执行的版本:
杰克逊1.xObjectMapper prettifyMapper = new ObjectMapper();
prettifyMapper.enable(SerializationConfig.Feature.INDENT_OUTPUT);
杰克逊2.x
ObjectMapper prettifyMapper = new ObjectMapper();
prettifyMapper.enable(SerializationFeature.INDENT_OUTPUT);