REST API返回整个查询的JSON



我维护了一个小的REST API (SpringBoot),提供从小型零售商获取票务数据的服务。例如:您可以发送请求,以便从某个票据(具有唯一ID)获取某些信息;JSON响应由唯一票证(在Mongo DB中作为唯一文档存储)中的字段选择组成。

假设API接收到一个请求,那么它将执行对mongodb的查询,然后应用投影将查询的数据解析为数据模型类,该类最终解析为响应JSON,例如:

{
"ticketData": {
"retailerId": "023",
"ticketId": "09834723469324",
"ticketDate": "2021-06-20"
},
"buyerData": {
"buyerId": "LN4382"
}
}

嗯,我现在需要返回整个查询的JSON(即包含整个票证信息的JSON,它有很多字段)。有没有办法在不创建具有数十或数百个属性的数据模型类来匹配存储的票证JSON的情况下实现这一点?即使我使用YAML指定API响应,然后使用编码工具,也是一项非常繁琐的工作,而且每当票据JSON格式发生变化时,我都需要更改DAO和响应。

我只是想发送原始Mongo存储的JSON并将其交还给API客户端。有什么办法可以做到这一点吗?

您可以使用Spring已经使用的Jackson ObjectMapper来序列化和反序列化JSON。

import java.io.IOException;
import java.io.UncheckedIOException;
import java.util.ArrayList;
import java.util.List;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
@RestController
public class HelloWorldController {
private final ObjectMapper objectMapper;
public HelloWorldController(ObjectMapper objectMapper) {
this.objectMapper = objectMapper;
}
@GetMapping("/jsonList")
public ResponseEntity<List<JsonNode>> getJsonList() {
List<String> data = List.of("{"number": 1}",
"{"number": 2}",
"{"number": 3}");
List<JsonNode> nodes = toJsonNodeList(data);
return ResponseEntity.ok(nodes);
}
private List<JsonNode> toJsonNodeList(List<String> strings) {
List<JsonNode> nodes = new ArrayList<>();
for (String s : strings) {
try {
JsonNode node = this.objectMapper.readTree(s);
nodes.add(node);
} catch (IOException ioe) {
throw new UncheckedIOException(ioe);
}
}
return nodes;
}
}

最新更新