我正在尝试做与这个问题相同的事情,但我尝试过所有可能性,仍然无法使它工作。
目前为止,我有以下代码:
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
。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);
}
输出结果为:
<?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/
将会输出:
{"container":{"leaf":{"id":{"$":"int32"},"possibleValues":{},"type":{"$":"int32"},"value":{"$":"2147483647"}},"id":{"$":"device"}}}
编辑:我刚刚根据这个链接测试了@Formatted
注释,但我也没有得到任何结果。
为什么这些注释不起作用,但是@Produces
和@BadgerFish
却正常工作呢?
如果可能的话,我更愿意以最简单的方式完成它。对我而言,最简单的方法就是让上述注释之一按预期工作。
get
。HTTP动词将传达该信息。 - Sam Berry