java - ReSTLet Android 客户端 - 如何将 ASP.NET Web API 的 JSON 响应映射到我的 Java 对象

标签 java android rest asp.net-web-api restlet

我有点难以理解如何做到最好并将我的 JASON 响应从 ASP.NET Web API 服务器映射到我的 Java 类中。

我使用此代码来请求服务器数据。

ClientResource res = new ClientResource(ADDRESS_URL + "/exed/students/");
               Representation rep = res.get();
               try {
                   Log.d(TAG, rep.getText());
               } catch (IOException e) {
                   Log.d(TAG, e.getMessage());
               }

我可以成功检索此 JSON 表示形式。

{"$id":"1","StudentId":1,"RowVersion":"AAAAAAAAB9M=","User":{"$id":"2","UserId":1,"Username":"1","Password":"1","UserTypeId":1,"FirstName":"George","LastName":"Taskos","RowVersion":"AAAAAAAAB9I=","Student":{"$ref":"1"},"Teacher":null,"UserType":null}}

现在我有了这些 Java 类。

用户。

public class User implements Serializable {

    // Private fields
    //
    private int userId;
    private String username;
    private String password;
    private int userTypeId;
    private String firstName;
    private String lastName;
    private String userType;
    private Timestamp rowVersion;

    // Setters
    // Getters....
 }

还有学生。

public class Student extends User implements Serializable {

    // Private fields
    private List<ClassType> classes;
    private List<ExamTaken> examsTaken;
    private Timestamp rowVersionStudent;
}

如何将表示形式检索到我的对象中。我已经看到了这么多,我想我现在很头晕,找不到解决方案。 我不熟悉 Java 服务器端或其他任何东西,所以我想这就是为什么我对在教程上读到的内容感到沮丧,并且我认为网站上缺少很多内容,或者没有明确解释。

任何简单的示例,至少可以像使用 SQLite 游标一样获取值并将它们放入我的对象中。 从响应中反序列化也非常棒:)

[编辑]

经过原始建议,我最终得到了这段代码。

ClientResource res = new ClientResource(ADDRESS_URL + "/exed/students/");
               Representation rep = res.get();

               try {
                   JSONObject response = new JSONObject(rep.getText());
                   Log.d(TAG, rep.getText());
                   JSONObject user = response.getJSONObject("User");
                   Log.d(TAG, "User: " + user.toString());
                   JSONObject student = response.getJSONObject("Student");
                   Log.d(TAG, "Student: " + student.toString());

                   Log.d(TAG, "FirstName: " + user.getString("FirstName"));
               } catch (Exception e) {
                   Log.d(TAG, "Exception: " + e.getMessage());
               }

但是收到一 strip 有此消息的异常:异常:println需要一条消息

Stacktrace 打印此内容:异常:android.util.Log.println_native( native 方法)

未处理的异常是这样的:

03-06 13:07:14.668: ERROR/AndroidRuntime(25353): FATAL EXCEPTION: Thread-13908
        java.lang.NullPointerException: println needs a message
        at android.util.Log.println_native(Native Method)
        at android.util.Log.d(Log.java:155)
        at com.tech.ed.data.access.WebServiceRepository$1.run(WebServiceRepository.java:74)
        at java.lang.Thread.run(Thread.java:856)

不太明白什么意思!

谢谢。

最佳答案

看起来您只有一系列 JSONObject 和字符串。只需为整个结果创建一个 JSONObject

JSONObject response = new JSONObject(representation);

然后提取出用户和学生对象

JSONObject user = response.getJSONObject("User");
JSONObject student = response.getJSONObject("Student");

然后你可以从相应的对象中获取任何嵌套的字符串、整数或其他内容,例如

String firstName = user.getString("FirstName");

关于java - ReSTLet Android 客户端 - 如何将 ASP.NET Web API 的 JSON 响应映射到我的 Java 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15227040/

相关文章:

rest - 对于损坏的有效负载(校验和失败),最合适的 HTTP 错误代码是什么?

spring - 您可以在 Spring(Boot)之外使用(任何)Spring 的功能吗?

java - object.equals方法在Java中应该如何工作?

java - Spring Boot 和 Spring Data Rest

java - 如何向 XWPFRun 添加超链接

android - Cardview 全部进入一张卡片

Android Studio vs Eclipse + ADT 插件?

android - 销毁 Activity 堆栈

java - Gson 应为 STRING 但实际为 BEGIN_ARRAY?

JavaFX - 在自定义节点上设置focusedProperty Listener