【问题标题】:Convert JSON properties with under_score to DTO with lowerCamel properties using Gson使用 Gson 将带有 under_score 的 JSON 属性转换为带有 lowerCamel 属性的 DTO
【发布时间】:2021-07-28 00:49:51
【问题描述】:

我在尝试将包含带有 under_score 的属性的 JSON 响应转换为带有 lowerCamelCase 属性的 DTO 时遇到了一些困难。

以 JSON 为例:

{
      "promoted_by": "",
      "parent": "",
      "caused_by": "jenkins",
      "watch_list": "prod",
      "u_automation": "deep",
      "upon_reject": "cancel"
}

以 DTO 为例:

@Data
public class TicketDTO {

    private String promotedBy;
    private String parent;
    private String causedBy;
    private String watchList;
    private String uAutomation;
    private String uponReject;
}

映射器:

@Mapper(componentModel = "spring")
public interface ITicketMapper {

    default TicketDTO toDTO(JsonObject ticket) {
        Gson gson = new GsonBuilder()
            .setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE)
            .create();

        return gson.fromJson(incident, TicketDTO.class);
    }

}

这个例子当然行不通,我想知道是否可以用 Gson 进行这种转换。

感谢您的帮助。

【问题讨论】:

    标签: json spring spring-boot gson dto


    【解决方案1】:

    你应该使用LOWER_CASE_WITH_UNDERSCORES

    将此命名策略与 Gson 一起使用会将 Java 字段名称从其驼峰形式修改为小写字段名称,其中每个单词由下划线 (_) 分隔。 以下是“Java 字段名”--->“JSON 字段名”形式的几个示例:

    • someFieldName ---> some_field_name
    • someFieldName ---> _some_field_name
    • aStringField ---> a_string_field
    • aURL ---> a_u_r_l

    setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES)
    

    UPPER_CAMEL_CASE 用于不同目的

    将此命名策略与 Gson 一起使用将确保 Java 字段名称的第一个“字母”在序列化为其 JSON 形式时大写。

    【讨论】:

    • 感谢您的评论。已经尝试过,得到以下错误:{“error”:“Internal Server Error”,“exception”:“com.google.gson.JsonSyntaxException”,“message”:“java.lang.IllegalStateException:预期的字符串,但为 BEGIN_OBJECT在路径 $.promoted_by" }
    • 看起来像那个不同的错误,你能在上面的帖子中添加带有堆栈跟踪的错误吗? @user3819295
    • 没错,这个问题不相关,显然我必须验证我的 JSON 响应。非常感谢您的帮助。如果我忽略有问题的字段,它会起作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多