gpt4 book ai didi

java - 使用 Spring 映射嵌套的 json 和 POJO

转载 作者:搜寻专家 更新时间:2023-11-01 02:26:22 25 4
gpt4 key购买 nike

我正在实现一个使用 json 发送和接收数据的 REST API(我对这个 API 设计完全陌生)。我正在使用 Spring 框架和 requestbody/responsebody 进行映射。最初,我有一个这样的 pojo:

public class Action implements Serializable {

@Id
private String id;
private String name;
private String applicationId;
private String timeStamp;
private String username;
private String options;
//Getters and Setters
}

这个pojo的json格式是这样的:

{
"id": "11954cd5-eec3-4f68-b0e8-a4d9b6a976a9",
"name": "kill button",
"applicationId": "34fa7bbf-e49f-4f2a-933a-de26b9fdb0f1",
"timeStamp": "2014-03-05T11:51+0000",
"username": "user1783",
"options": "facebook app"
}

Controller 是这样的:我没有得到任何 json,Spring 已经转换为 java 对象,它应该自己手动转换吗?

@RequestMapping(value = "applications/{appId}/actions", method = RequestMethod.POST, consumes = "application/json", produces = "application/json")
@ResponseBody
public Action addAction(@PathVariable String appId, @RequestBody Action action) {
return actionService.add(appId, action);
}

你可以在这里找到一个漂亮的 json 格式: https://gist.github.com/bakharzy/8948950

我想将 json 中的最后一对更改为 json 本身,因为它以 gist 中的第二种 json 格式显示。因此用户可以发送更多信息。现在我有了一种新的 json 格式,它是 json 中的 json,我应该如何更改 pojo(私有(private)字符串选项;)以存储来自第二种 json 格式的数据。请注意,内部 json 可以有任意数量的对。

我的第一个想法是将 pojo 中的选项更改为类似 Hash 对象的东西。可行吗?如果是,怎么办?

谢谢

最佳答案

像这样使用嵌套对象:

public class Action implements Serializable {

@Id
private String id;
private String name;
private String applicationId;
private String timeStamp;
private String username;
private Map<String, String> options;
//Getters and Setters
}

这将为您提供以下格式:

{
"id": "11954cd5-eec3-4f68-b0e8-a4d9b6a976a9",
"name": "kill button",
"applicationId": "34fa7bbf-e49f-4f2a-933a-de26b9fdb0f1",
"timeStamp": "2014-03-05T11:51+0000",
"username": "user1783",
"options":{
"data": "Click Here",
"size": "36",
"application":"facebook app"
}
}

更新: - 添加测试以证明该解决方案确实有效。

public class ActionTest {

@Test
public void testObjectToJson() throws JsonProcessingException {

Action action = new Action();
action.setId("id");
action.setUsername("username");
action.setApplicationId("applicationId");
action.setName("name");
action.setTimeStamp("timestamp");
Map<String, String> map = Maps.newHashMap();
map.put("key", "value");
map.put("key2", "value2");
action.setOptions(map);

ObjectMapper mapper = new ObjectMapper();

String value = mapper.writeValueAsString(action);
System.out.println(value);
}

@Test
public void testJsonToObject() throws IOException {

String json = "{\"id\":\"id\",\"name\":\"name\",\"applicationId\":\"applicationId\",\"timeStamp\":\"timestamp\",\"username\":\"username\",\"options\":{\"key\":\"value\", \"key2\":\"value2\"}}";

ObjectMapper mapper = new ObjectMapper();

Action value = mapper.readValue(json, Action.class);
System.out.println(value);
}
}

class Action {

private String id;
private String name;
private String applicationId;
private String timeStamp;
private String username;
private Map<String, String> options;

public Action() {}

@Override
public String toString() {
final StringBuffer sb = new StringBuffer("Action{");
sb.append("id='").append(id).append('\'');
sb.append(", name='").append(name).append('\'');
sb.append(", applicationId='").append(applicationId).append('\'');
sb.append(", timeStamp='").append(timeStamp).append('\'');
sb.append(", username='").append(username).append('\'');
sb.append(", options=").append(options);
sb.append('}');
return sb.toString();
}

public String getId() {
return id;
}

public void setId(String id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getApplicationId() {
return applicationId;
}

public void setApplicationId(String applicationId) {
this.applicationId = applicationId;
}

public String getTimeStamp() {
return timeStamp;
}

public void setTimeStamp(String timeStamp) {
this.timeStamp = timeStamp;
}

public String getUsername() {
return username;
}

public void setUsername(String username) {
this.username = username;
}

public Map<String, String> getOptions() {
return options;
}

public void setOptions(Map<String, String> options) {
this.options = options;
}
}

关于java - 使用 Spring 映射嵌套的 json 和 POJO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22212158/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com