小编Dan*_*att的帖子

处理杰克逊反序列化中的备用属性名称

我正在努力将REST/JSON服务从Coldfusion 9转换为Spring-MVC 3.1应用程序.我使用的杰克逊(1.9.5)和MappingJacksonJsonConverter Spring提供,和我定制ObjectMapper与CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES名称字段.

我面临的问题是我们的遗留服务产生"带有下划线的UPPER案例的驼峰案例"作为json属性名称.这个JSON的消费者,也是用ColdFusion编写的,可能不关心案例,但Jackson确实关心案例,并抛出UnrecognizedPropertyExceptions.

寻找到几乎所有设置后,我可以从ObjectMapper达到 - DeserializationConfig,DeserializerProvider,等我结束了一个非常混乱的黑客中,我解析到一个JSON树,自定义JsonGenerator,较低的情况下,字段名,并将其输出然后将其作为对象解析回来.

MappingJacksonHttpMessageConverter mc = new MappingJacksonHttpMessageConverter() {
    @Override
    protected Object readInternal(Class<?> clazz, HttpInputMessage inputMessage) throws IOException, HttpMessageNotReadableException {
        return this.getObjectMapper().readValue(translateToLowerCaseKeys(inputMessage.getBody()), getJavaType(clazz));
    }

    private byte[] translateToLowerCaseKeys(InputStream messageBody) throws IOException {
        StringWriter sw = new StringWriter();
        JsonGenerator lowerCaseFieldNameGenerator = new JsonGeneratorDelegate(this.getObjectMapper().getJsonFactory().createJsonGenerator(sw)) {
            @Override
            public void writeFieldName(String name) throws IOException, org.codehaus.jackson.JsonGenerationException {
                delegate.writeFieldName(name.toLowerCase());
            };
        };
        this.getObjectMapper().writeTree(lowerCaseFieldNameGenerator, this.getObjectMapper().readTree(messageBody));
        lowerCaseFieldNameGenerator.close();
        return sw.getBuffer().toString().getBytes();
    }
};
Run Code Online (Sandbox Code Playgroud)

这个解决方案似乎非常低效.有一个解决方案适用于地图的键,但我无法找到类似的字段名称解决方案.

另一种解决方案是拥有两个setter,一个用传统字段名称注释.命名策略必须扩展为忽略这些字段,在我的情况下这很好,因为对象映射器不会处理任何其他具有UPPER_UNDERSCORE策略的类:

public class JsonNamingTest {
    public static class CaseInsensitive extends LowerCaseWithUnderscoresStrategy …
Run Code Online (Sandbox Code Playgroud)

java json jackson

11
推荐指数
3
解决办法
2万
查看次数

Salesforce部署最佳实践?

我们目前正在尝试使用Salesforce平台来替换几个内部CRM工具,并且已经部署了一些代码.随着我们的代码库的增长,我们开始感受到其他人在代码组织方面所描述的一些痛苦(没有好的命名空间/包装等).我们是企业级客户,虽然我们目前的实验目前只涉及一个部门,但我们希望它最终会成长为整个公司.

在一个拥有3-4个完全不同的销售团队的组织中,每个团队都有不同的业务流程,因此编码不同(在SF术语中:记录类型,布局,触发器等),管理部署的好方法是什么?"套餐"是否适合这种情况,或者整个公司是否应该在同一个SF Org /名称空间内运行良好?

salesforce

3
推荐指数
1
解决办法
3901
查看次数

标签 统计

jackson ×1

java ×1

json ×1

salesforce ×1