【问题标题】:JSON Output JavaJSON 输出 Java
【发布时间】:2017-10-09 23:08:41
【问题描述】:

我正在编写一个 RESTful API 程序以部署在 AWS 上。我正在从程序中获取 JSON 输出。当我测试程序时,它返回的 JSON 输出与预期的输出不同。方向、大写和小写也不如我所愿。

预期输出:

[
  {
    "Username": "****",
    "UUID": "****",
    "Tenant_ID": "****",
    "Site_ID": "****"
  }
]

收到的输出:

[
  {
    "UUID": "****",
    "site_ID": "****",
    "tenant_ID": "****",
    "userName": "****"
  }
]

资源代码:

public List<Data> getData(){
    List<Data> list = new ArrayList<>();
    Connection conn = null;
    Statement stat = null;
    try{
        Class.forName("com.mysql.jdbc.Driver");
        conn = DriverManager.getConnection(DB_URL);
        stat = conn.createStatement();
        String sql = "SELECT * FROM data";
        ResultSet resu = stat.executeQuery(sql);
        while(resu.next()){
            String UserName = resu.getString("username");
            String UUID = resu.getString("UUID");
            String Tenant_ID = resu.getString("tenant_id");
            String Site_ID = resu.getString("site_id");
            list.add(new Data(UserName, UUID, Tenant_ID, Site_ID));
        }
        resu.close();
        stat.close();
        conn.close();
    }
    catch(SQLException se){
        se.printStackTrace();
    }
    catch(Exception e){
        e.printStackTrace();
    }
    finally{
        try{
            if(stat!=null){
                stat.close();
            }
        }
        catch (SQLException se2){
            se2.printStackTrace();
        }
        try{
            if(conn!=null){
                conn.close();
            }
        }
        catch(SQLException se3){
            se3.printStackTrace();
        }
    }
    return list;
}

服务代码:

@Produces(MediaType.APPLICATION_JSON)
@GET
@Path("/v2")
public List<Data> getData(){
    return ds.getData();
}

数据类:

public class Data {
    private String UserName;
    private String UUID;
    private String Tenant_ID;
    private String Site_ID;

    public Data(){

    }

    public Data(String userName, String uUID, String tenant_ID, String site_ID) {
        super();
        UserName = userName;
        UUID = uUID;
        Tenant_ID = tenant_ID;
        Site_ID = site_ID;
    }

    public Data(String uUID, String tenant_ID, String site_ID) {
        super();
        UUID = uUID;
        Tenant_ID = tenant_ID;
        Site_ID = site_ID;
    }

    @JsonProperty("Username")
    public String getUserName() {
        return UserName;
    }

    public void setUserName(String userName) {
        UserName = userName;
    }

    @JsonProperty("UUID")
    public String getUUID() {
        return UUID;
    }

    public void setUUID(String UUID) {
        this.UUID = UUID;
    }

    @JsonProperty("Tenant_ID")
    public String getTenant_ID() {
        return Tenant_ID;
    }

    public void setTenant_ID(String tenant_ID) {
        Tenant_ID = tenant_ID;
    }

    @JsonProperty("Site_ID")
    public String getSite_ID() {
        return Site_ID;
    }

    public void setSite_ID(String site_ID) {
        Site_ID = site_ID;
    }
}

感谢每一位帮助这个问题的成员。

【问题讨论】:

  • 要么您需要更改 rest api 中的代码以返回 JSON,要么接受该 json 并在您身边进行操作。
  • 嗨。 @NitinDhomse 上面是我在 REST API 中返回 JSON 的代码,我希望修改它以获得预期的输出,但我不知道在哪里修改它。
  • 你能在Data类的顶部发布你的导入吗?我怀疑您正在导入一个稍微错误的注释,因此 @JsonProperty 不会按照您的预期进行。
  • 嗨。 @RyanWeir 我的导入是import com.fasterxml.jackson.annotation.JsonProperty;

标签: java json amazon-web-services amazon-rds


【解决方案1】:

当您只想将较新版本的 jackson(位于不同项目中)com.fasterxml.jackson 中包含时,您很有可能从较旧的 org.codehaus.jackson 包中导入 jackson 注释 @JsonProperty 注释你的项目。

检查旧“codehaus”版本的依赖项,并将其更新为仅引用新版本(此更改应与您的代码前向兼容)。

然后尝试重建以查看它是否按预期工作。

请看这里:https://stackoverflow.com/a/30782762/808532

【讨论】:

  • 嗨。 @RyanWeir 感谢您的回复。我检查了我的 pom.xml。我包括&lt;dependency&gt; &lt;groupId&gt;com.fasterxml.jackson.core&lt;/groupId&gt; &lt;artifactId&gt;jackson-annotations&lt;/artifactId&gt; &lt;version&gt;2.3.2&lt;/version&gt; &lt;/dependency&gt;。我也无法在我的 pom.xml 中找到任何“codehaus”。
  • 可能是另一个依赖项导致 Jackson v1 在构建时被拉入 - 尝试在您的项目目录中运行 mvn dependency:tree 并搜索对不同版本的任何引用以查看是否是这种情况。
【解决方案2】:

尝试将您的 jackson 注释降级到较旧的 codehhaus 版本。当出现这样的问题时,jersey 使用的 jackson 版本和注释的版本会混淆。由于您使用的是新注释,因此请使用旧注释。 org.codehaus.jackson.annotate.JsonProperty

【讨论】:

  • 嗨。 @eDog 感谢您的回答。我试图将 fastxml 版本降级为旧的 codehhaus 版本。它也不起作用。
猜你喜欢
  • 2017-09-08
  • 1970-01-01
  • 1970-01-01
  • 2015-03-22
  • 2019-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多