【发布时间】:2014-05-05 06:23:44
【问题描述】:
我用
创建了一个映射器new ObjectMApper()
.setPropertyNamingStrategy(PropertyNamingStrategy.PASCAL_CASE_TO_CAMEL_CASE)
.setSerializationInclusion(Include.NON_NULL)
并且序列化在字段上完美运行(没有 getter 和 setter)。字段currentStatus 被序列化为"currentStatus"(第一个字母大写)。但我也有一个必须是驼峰式的吸气剂(没有字段和二传手)。所以我这样做:
@JsonProperty("abcDef")
public String getZxy() {...
但它被序列化为"AbcDef" 而不是"abcDef"。看起来命名策略仍然会触发并更改第一个字母。我使用杰克逊数据绑定 2.3.2;
如何将这个 getter 映射为首字母小写?
编辑: 丑陋的代码,但显示了问题。这个测试应该通过但它失败了
import static org.assertj.core.api.Assertions.assertThat;
import org.testng.annotations.Test;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.PropertyNamingStrategy;
public class JsonFailureTest {
@Test
public void should_serialize_first_letter_lowercase() throws Exception {
String json = new ObjectMapper()
.setPropertyNamingStrategy(PropertyNamingStrategy.PASCAL_CASE_TO_CAMEL_CASE)
.writeValueAsString(
new Object(){
@JsonProperty("fooBar")
public String whatever() {return "";}
});
assertThat(json).contains("fooBar");
}
}
【问题讨论】:
-
FWIW,这是一个真正的错误,报告为github.com/FasterXML/jackson-databind/issues/428