来自java Pojo的JSON转换错误
我有下面这样的用户,并且 我试图将userDTO转换为json字符串,并从控制器调用rest API端点,但调用的rest API端点抛出错误,因为“数据”不是有效的JSONobject来自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
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));