JSON在Jersey上使用Jackson 处理器时,何时以及为何需要JAXB在两者之间使用注释?Object->JAXB->JSON
JSON
JAXB
Object->JAXB->JSON
杰克逊(Jackson)还提供了自己的JAX-RS服务提供商以直接使用Object->JSON。这种方法缺少什么?还是为什么我比其他人更喜欢
JAX-RS
Object->JSON
ps:我也用弹簧
为了生成JSON,通常只需指定即可@Produces(MediaType.APPLICATION_JSON)。但是,这将默认采用JAXB路由。
@Produces(MediaType.APPLICATION_JSON)
使用Object-> JAXB-> JSON,您必须注释要映射的类@XmlRootElement。这可以很好地工作,但是一旦您要序列化a,HashMap您将不会得到明显的{keyOne:"one",keyTwo:"two"}而是类似的东西{entry:[{key:"keyOne",value:"one"},{key:"keyTwo",value:"two"}]}。
@XmlRootElement
HashMap
{keyOne:"one",keyTwo:"two"}
{entry:[{key:"keyOne",value:"one"},{key:"keyTwo",value:"two"}]}
因此,要采用直接的Object-> JSON方式,只需在web.xml中指定以下内容:
<init-param> <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name> <param-value>true</param-value> </init-param>
使用此JSON映射将按您期望的方式工作。只是不要忘记删除@XmlRootElement注释,它们会在POJO映射打开时强制生成XML。