Jax-rs json pretty output
2022-09-03 03:16:54
在Java中,当我使用
@Produces("application/json")
注释输出未格式化为人类可读形式。我该如何做到这一点?
在Java中,当我使用
@Produces("application/json")
注释输出未格式化为人类可读形式。我该如何做到这一点?
只是为了记录,如果您只想为某些资源启用漂亮的输出,则可以在资源方法上使用@JacksonFeatures注释。
下面是一个示例:
@Produces(MediaType.APPLICATION_JSON)
@JacksonFeatures(serializationEnable = { SerializationFeature.INDENT_OUTPUT })
public Bean resource() {
return new Bean();
}
这就是如何根据查询字符串中是否存在“pretty”来正确执行条件漂亮/非漂亮json输出的方法。
创建一个实现 ,它将在每个请求上执行:PrettyFilter
ContainerResponseFilter
@Provider
public class PrettyFilter implements ContainerResponseFilter {
@Override
public void filter(ContainerRequestContext reqCtx, ContainerResponseContext respCtx) throws IOException {
UriInfo uriInfo = reqCtx.getUriInfo();
//log.info("prettyFilter: "+uriInfo.getPath());
MultivaluedMap<String, String> queryParameters = uriInfo.getQueryParameters();
if(queryParameters.containsKey("pretty")) {
ObjectWriterInjector.set(new IndentingModifier(true));
}
}
public static class IndentingModifier extends ObjectWriterModifier {
private final boolean indent;
public IndentingModifier(boolean indent) {
this.indent = indent;
}
@Override
public ObjectWriter modify(EndpointConfigBase<?> endpointConfigBase, MultivaluedMap<String, Object> multivaluedMap, Object o, ObjectWriter objectWriter, JsonGenerator jsonGenerator) throws IOException {
if(indent) jsonGenerator.useDefaultPrettyPrinter();
return objectWriter;
}
}
}
差不多就是这样!
您需要确保泽西岛通过自动包裹扫描或手动注册来使用此类。
花了几个小时试图实现这一目标,发现以前没有人发布过即用型解决方案。