当前位置: 首页 > 知识库问答 >
问题:

ibm mobilefirst适配器-将JSONObject转换为POJO类

吴弘壮
2023-03-14

任何人都知道--如何将JSONObject转换为POJO类?

我已经创建了一个适配器,我想在将其发送到客户端之前将其转换为Pojo。

1)my ResourceAdapterResource.java(适配器)

@POST
@Path("profiles/{userid}/{password}")
@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
public JSONObject getStatus(@PathParam("userid") String userid, @PathParam("password") String password) throws IOException {

    Map<String, Object> maps = new HashMap<String,Object>();
            map.put("userid", userid);
            map.put("password",password); 

    // json Object will get the value from SOAP Adapter Service
    JSONObject obj = soapAdapterService(maps);

    /** Question here, how to add to POJO.. I have code here but not work, null values**/
        // set to Object Pojo Employee
    Employee emp = new Employee();
    emp.setUserId(String.valueOf(obj.get("userId")));
    emp.setUserStatus((String.valueOf(obj.get("userStatus")));

    // when I logging its show Empty.
    logger.info("User ID from service : " + emp.getUserId());
    logger.info("Status Id from service : " + emp.getUserStatus());


    return obj;
}
import java.io.Serializable;

@SuppressWarnings("serial")
public class Employee implements Serializable{
private String userid;
private String userStatus;

public String getUserid() {
        return userid;
    }

    public void setUserid(String userid) {
        this.userid= userid;
    }

    public String getUserStatus() {
        return userStatus;
    }

    public void setUserStaus(String userStatus) {
        this.userStatus= userStatus;
    }
}

但是当我检查log info(message.log)-服务器日志时,状态为NULL。

来自服务的用户ID:null来自服务的状态ID:null

看起来它的JSON Java IBM API,它有没有像Jackson API那样的ObjectMapper将JsonObject映射到POJO类。

 {
      "statusReason": "OK",
      "responseHeaders": {
        "Content-Length": "1849",
        "Content-Language": "en-US",
        "Date": "Thu, 23 Mar 2017 01:40:33 GMT",
        "X-Powered-By": "Servlet/3.0",
        "Content-Type": "text/xml; charset=utf-8"
      },
      "isSuccessful": true,
      "responseTime": 28,
      "totalTime": 33,
      "warnings": [],
      "Envelope": {
        "soapenv": "http://schemas.xmlsoap.org/soap/envelope/",
        "Body": {
          "checkEmployeeLoginResponse": {
            "a": "http://com.fndong.my/employee_Login/",
            "loginEmployeeResp": {
              "Employee": {
                "idmpuUserName": "fndong",
                "Status": "A",
                "userid": "fndong",
                "Password": "AohIeNooBHfedOVvjcYpJANgPQ1qq73WKhHvch0VQtg@=",
                "PwdCount": "1",
                "rEmail": "fndong@gmail.com"
              },
              "sessionId": "%3F",
              "statusCode": "0"
            }
          }
        }
      },
      "errors": [],
      "info": [],
      "statusCode": 200
    }
String objUserId = (String) objectAuth.get("userid");

共有1个答案

寿翰飞
2023-03-14

很明显,您的String.ValueOf(Obj.Get(“userid”))返回的是null或空,所以问题是它的哪一部分?

您可以记录obj.get(“userid”)并查看其是否为空,在这种情况下,响应不包含您期望的内容。

但我怀疑问题是String.valueOf()转换没有达到预期的效果。MobileFirst中的JSONObject看起来是com.ibm.json.java.JSONObject,当我在上面搜索时,我找到的示例只是转换为String:

emp.setUserId((String) obj.get("userId"));

编辑:现在您已经添加了Swagger结果,我认为您的obj.get(“userid”)本身可能返回null。你查过了吗?

首先,“userid”不是“userid”。资本化很重要。

但更重要的是,“userid”嵌套在JSON的深处,所以我认为仅仅从顶层JSONObject获取它是行不通的。我想你应该做一些事情:

JSONObject envelope = (JSONObject) obj.get("Envelope");
JSONObject body = (JSONObject) envelope.get("Body");
JSONObject response = (JSONObject) body.get("checkEmployeeLoginResponse");
JSONObject resp = (JSONObject) response.get("loginEmployeeResp");
JSONObject employee = (JSONObject) resp.get("Employee");
emp.setUserId((String) employee.get("userid"));
emp.setUserStatus((String) employee.get("status"));
 类似资料:
  • 问题内容: 似乎无法弄清楚。我正在尝试在GSON中进行JSON树操作,但是在转换为之前,我不知道或没有POJO将字符串转换为的情况。有没有办法直接从a 转到? 我已经尝试了以下(Scala语法): 但失败,JSON被转义并解析为唯一,并 返回一个empty 。 有任何想法吗? 问题答案: 使用JsonParser; 例如:

  • 问题内容: 我有一个对象。用它创建对象的最简单方法是什么? 问题答案: 再次从中获取JSON字符串并进行解析

  • 问题内容: 我有一些要转换成的属性 我可以从json.org或使用什么吗? 问题答案: 使用来自http://json.org/的 Jackson(http://jackson.codehaus.org/)

  • 问题内容: 我正在将Jersey用于REST WS,并且得到的响应为JSON。 我想将此响应转换为POJO。怎么做 ? 问题答案: 要在Java和JSON之间进行转换,有很多可供选择的API 。 您可以“手动”遍历JSON组件并提取值以填充Java对象,或者可以使用JSON到Java的绑定API来解决许多低级映射问题。

  • 我试着把POJO转换成protobuf。这和我想做的是一样的。(https://github.com/BAData/protobuf-converter,将协议缓冲区转换为POJO) 但是,它不支持protobuf中的映射类型。所以当我试图转换protobuf的地图时 有什么简单的方法做这项工作吗?

  • 我想将字节转换为JsonObject。我试着这样: 但我遇到编译器错误: 我怎么能这样呢?