首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么JSON漂亮的打印不起作用?

为什么JSON漂亮的打印不起作用?
EN

Stack Overflow用户
提问于 2015-06-25 18:25:50
回答 1查看 1.4K关注 0票数 2

我正试图和这个问题做同样的事情,但我已经尝试了我发现的每一种可能,但我无法使它发挥作用。

到目前为止,我有这样的代码:

代码语言:javascript
复制
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
//import javax.ws.rs.core.MediaType;

import org.jboss.resteasy.annotations.providers.jaxb.json.BadgerFish;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Controller;

import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.jaxrs.annotation.JacksonFeatures;

@Path(value = "/mock")
@Controller
public class MockController {

    @BadgerFish
    @GET
    @Path(value = "/get")
    @Produces(MediaType.APPLICATION_JSON_VALUE)
    @JacksonFeatures(serializationEnable = {SerializationFeature.INDENT_OUTPUT})
    public Container getMockedContainer() {
        return newContainer();
    }

    @BadgerFish
    @GET
    @Path(value = "/getXML")
    @Produces(value = MediaType.APPLICATION_XML_VALUE)
    public Container getMockedContainerXML() {
        return newContainer();
    }

    //MORE CODE HERE
}

我可以访问http://localhost:8081/containerMocked/mock/getXML/并获得预期的XML输出,非常简单。但是当我尝试localhost/.../get/时,我得到了正确的数据,但没有很好地打印出来。

至少对我来说,@Produces(MediaType.APPLICATION_JSON)@JacksonFeatures(serializationEnable = { SerializationFeature.INDENT_OUTPUT})应该足够了。

我做错了什么?

免责声明:,我不会在这里说明newContainer()所做的事情,因为它涉及太多的类。你必须明白的是这个Main

代码语言:javascript
复制
public static void main(String[] args) throws javax.xml.bind.JAXBException {
    Container container = new MockController().newContainer();
    final javax.xml.bind.JAXBContext jaxbContext = javax.xml.bind.JAXBContext.newInstance(Container.class);
    javax.xml.bind.Marshaller marshaller = jaxbContext.createMarshaller();
    marshaller.setProperty(javax.xml.bind.Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
    marshaller.marshal(container, System.out);
}

将产出:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<container>
    <leaf>
        <id>int32</id>
        <possibleValues/>
        <type>int32</type>
        <value>2147483647</value>
    </leaf>
    <id>device</id>
</container>

http://localhost:8081/containerMocked/mock/get/将输出:

代码语言:javascript
复制
{"container":{"leaf":{"id":{"$":"int32"},"possibleValues":{},"type":{"$":"int32"},"value":{"$":"2147483647"}},"id":{"$":"device"}}}

编辑:,我刚刚根据此链接测试了@Formatted注释,也没有得到任何结果。

为什么这些注释不起作用,例如@Produces@BadgerFish正常工作?

如果可能的话,我宁愿用最简单的方式来做。对我来说,最简单的方法是让上面的注释像预期的那样工作。

EN

回答 1

Stack Overflow用户

发布于 2015-06-25 19:03:49

您可以尝试在JAX实现中注册ObjectMapper提供程序:

代码语言:javascript
复制
@Provider
public class ObjectMapperProvider implements ContextResolver<ObjectMapper> {

    @Override
    public ObjectMapper getContext(Class<?> aClass) {
        return new ObjectMapper().enable(SerializationFeature.INDENT_OUTPUT);
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31057987

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档