在尝试使用 Eclipse Moxy 将类编组为 JSON 时,我遇到了一个非常烦人的错误。
我的一个域类中有一个具有以下值的属性:"the City’s original city site"
其中包含代码点 u+2019 (')
当 Jaxb 尝试编组这个值时,我莫名其妙地得到了一个奇怪的控制:"Citys original city site"
这会导致无效的 JSON 在解码时返回空值。我用杰克逊试过这个,并收到一个 ascii 转义字符,这仍然是错误的,但它至少使 JSON 有效!
Moxy 应该能够正确输出,因为 ' 是一个有效的 unicode 字符并且在 JSON 中有效。有什么办法可以正确输出 ' (和任何其他 unicode 字符),最好将这个不必要的字符转换为常规撇号。
这是我的提供者类:
@Provider
@Component("customMOXyJsonProvider")
public class CustomMOXyJsonProvider extends MOXyJsonProvider {
@Override
protected void preWriteTo(Object object, Class<?> type, Type genericType,
Annotation[] annotations, MediaType mediaType,
MultivaluedMap<String, Object> httpHeaders, Marshaller marshaller)
throws JAXBException {
marshaller.setProperty(MarshallerProperties.JSON_INCLUDE_ROOT, true);
marshaller.setProperty(Marshaller.JAXB_ENCODING,"UTF-8");
}
}
我正在使用 2.5.1 版的 Moxy。
<dependency>
<groupId>org.eclipse.persistence</groupId>
<artifactId>org.eclipse.persistence.moxy</artifactId>
<version>2.5.1</version>
</dependency>
我的系统中有几个组件理论上可能会破坏值(postgres、jdbc、hibernate、cxf 和 tomcat),但我通过测试确定该值正确存储在我的域类中 - 然后损坏,如 Elliot Spitzer在编组步骤上拜访妓女。