Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
来自java Pojo的JSON转换错误_Java_Json - Fatal编程技术网

来自java Pojo的JSON转换错误

来自java Pojo的JSON转换错误,java,json,Java,Json,我有下面这样的用户,并且 我试图将userDTO转换为json字符串,并从控制器调用rest API端点,但调用的rest API端点抛出错误,因为“数据”不是有效的JSONobject public class UserDTO { private String userId; private String firstname; private String lastname; private List<Order> orders; some more data me

我有下面这样的用户,并且 我试图将userDTO转换为json字符串,并从控制器调用rest API端点,但调用的rest API端点抛出错误,因为“数据”不是有效的JSONobject

public  class UserDTO {

 private String userId;
 private String firstname;
 private String lastname;
 private List<Order> orders;
  some more data member plus // setter  / Getters

}
问题:- 调用的API[server]抛出“数据不是有效的JSONObject。我是否遗漏了什么?请指导我

正在尝试发送以下类型的JSON格式

{ 
  "data":{ 
  "username":"test",
  "orderId": "123097R",
  "firstName":"xydz",
  "lastName":"xyzd",
  "email":"xx@gmail.com"
 }
}

由于没有提供详细的服务器日志,我假设所提到的错误发生在REST层

请尝试以下操作-创建有效负载Java类:

public  class RestPayload implements java.io.Serializable {

 private UserDTO data;

 public  UserDTO getUserDTO (){
  return this.data;
 }
  public void setUserDTO(UserDTO data){
   this.data = data;
  }

}
然后将当前的rest操作修改为:

 @POST 
 public MicroserviceResponse createOrder(@PathVariable("cId") final String cId,  @RequestBody final RestPayload  restPayload ) throws Exception {

        UserDTO orderSource = restPayload.getUserDTO();
 }
更新:

您还可以使用原始JSON并根据需要修改值

尝试此操作-下面的代码显示了如何将“数据”作为父对象添加到UserDTO:

    Gson gson = new Gson();
    JsonElement userDtoJsonElement = gson.toJsonTree(userDTO);

    JsonObject dataObject = new JsonObject();
    dataObject.add("data", userDtoJsonElement);

    System.out.println(gson.toJson(dataObject));

你能发布整个stacktrace吗?另外,既然你似乎在使用Jackson,为什么你要手动将pojo转换成字符串呢?@Aris;-这是调用method.org.json.JSONException:JSONObject[\“data\”]not found.时抛出的错误。我之所以将数据转换成字符串,是因为,请参阅我文章中的服务器代码段。他们正在寻找以“数据”开头的json格式查看
123097R
它是字符串,应该包装在
@talex中。所有数据都已更正,没有任何问题。他们是否有任何方法可以自定义json响应..我的意思是使用UserDTO,我需要添加“数据”作为父对象,您可以创建另一个DTO(例如ResponsePayload)与“RestPayload”类似,并返回它或将其嵌入响应中。基本上,您不需要手动直接处理JSON序列化和去序列化。Java和您的REST提供商将处理它。谢谢。您的解决方案肯定有效,但我正试图避免嵌入pojo。这是他们直接添加“数据”的方式吗“作为问题的父节点。如果没有,我可以试试你的建议。手动生成json,然后修改它以添加父元素“data”不是一个干净的解决方案,你将使代码复杂化,不必要地影响性能。这将是一个粗糙的解决方案。但是如果你真的想这样做的话,这是可以做到的。我终于做到了。通过jsut将对象传递给RESTAPI。谢谢
 @POST 
 public MicroserviceResponse createOrder(@PathVariable("cId") final String cId,  @RequestBody final RestPayload  restPayload ) throws Exception {

        UserDTO orderSource = restPayload.getUserDTO();
 }
    Gson gson = new Gson();
    JsonElement userDtoJsonElement = gson.toJsonTree(userDTO);

    JsonObject dataObject = new JsonObject();
    dataObject.add("data", userDtoJsonElement);

    System.out.println(gson.toJson(dataObject));