Java ObjectMapper writeValueAsString()在写入字符串时更改键名

Java ObjectMapper writeValueAsString()在写入字符串时更改键名,java,json,jackson,Java,Json,Jackson,我正在尝试将DTO转换为字符串以存储在数据库中。我打电话: ObjectMapper mapper = new ObjectMapper(); TypeFactory factory = mapper.getTypeFactory(); // type of key of response map JavaType stringType = factory.constructType(String.class); // type o

我正在尝试将DTO转换为字符串以存储在数据库中。我打电话:

ObjectMapper mapper = new ObjectMapper();
        TypeFactory factory = mapper.getTypeFactory();
        // type of key of response map
        JavaType stringType = factory.constructType(String.class);
        // type of value of response map
        JavaType listOfDtosType = factory.constructCollectionType(ArrayList.class, SummonerRankedInfoDTOEntry.class);
        // create type of map
        JavaType responseType = factory.constructMapType(HashMap.class, stringType, listOfDtosType);
        try {
            assert json != null;
            Map<String, List<SummonerRankedInfoDTOEntry>> response = new ObjectMapper().readValue(json, responseType);
            summonerRankedInfoDTO.setIntegerSummonerRankedInfoDTOEntryMap(response);
            logger.info("Json has been de-serialized" + summonerRankedInfoDTO.getIntegerSummonerRankedInfoDTOEntryMap());
        } catch (IOException e) {
            e.printStackTrace();
        }
        return summonerRankedInfoDTO;
isFreshBlood、isHotStreak、IsNactive和IsRetainer字段

我调用上述代码并记录它返回的字符串,即:

以上所有字段都失去了“是”部分:新鲜血液、热条纹。。。等等

我可以发布我的DTO,但我已经寻找了很长时间,不知道为什么它会更改它们的名称。我想我从来没有在没有“is”的情况下给它们命名过,因为API调用返回的值上有“is”

感谢您的帮助,不知道如何使这个问题不那么令人困惑

编辑:我的联盟是:

private String division;

private boolean isFreshBlood;
private boolean isHotStreak;
private boolean isInactive;
private boolean isVeteran;

private int leaguePoints;

private MiniSeriesDTOEntry miniSeries;
private String playerOrTeamId;
private String playerOrTeamName;
private int wins;
private int losses;

@Override
public String toString() {
    return "LeagueDTOEntry{" +
            "division='" + division + '\'' +
            ", isFreshBlood=" + isFreshBlood +
            ", isHotStreak=" + isHotStreak +
            ", isInactive=" + isInactive +
            ", isVeteran=" + isVeteran +
            ", leaguePoints=" + leaguePoints +
            ", losses=" + losses +
            ", miniSeries=" + miniSeries +
            ", playerOrTeamId='" + playerOrTeamId + '\'' +
            ", playerOrTeamName='" + playerOrTeamName + '\'' +
            ", wins=" + wins +
            '}';
}

如果您真的想保留
is
前缀,而不是遵守标准的JavaBean约定,请使用(例如)注释getter

而且,您的JSON逻辑太复杂了。你应该做些什么

Map<String, List<SummonerRankedInfoDTOEntry>> response = 
    new ObjectMapper().readValue(
        json, 
        new TypeReference<Map<String, List<SummonerRankedInfoDTOEntry>>>() {});
Map响应=
新建ObjectMapper().readValue(
json,
新类型引用(){});

发布你的LeagueDTOEntry对象,至少是字段名,你不需要显示getter和setter。
在我从API返回的JSON中。我想让我所有的代码都和我得到的json一样,但是与
有关的一切都是好的,直到它输入数据库时发生变化。对不起,但是你能解释一下这是如何工作的吗?从API字符串到DTO的反序列化是好的,但是当我序列化时,它将isInactive更改为inactive。我想我的问题措辞有点混乱,抱歉。我已经在我的getter上添加了注释,我以前也在字段上添加了注释,但我无法让它以任何方式工作。当从DTO更改为字符串时,我认为应该只使用变量名,除非另有规定?谢谢。编辑你的问题,然后发布一个简单完整的例子来重现这个问题。这里有一个,它不会重现你的问题:嗨,抱歉,我最近一直很忙,我回到你的答案,意识到我没有用旧数据清除我的数据库。。。你的解决方案成功了,对不起!非常感谢您的帮助,我将查找它的工作原理,因为我不知道Jackson mapper使用了getter和setter!再次感谢。
@JsonProperty("isInactive")
Map<String, List<SummonerRankedInfoDTOEntry>> response = 
    new ObjectMapper().readValue(
        json, 
        new TypeReference<Map<String, List<SummonerRankedInfoDTOEntry>>>() {});