java - 如何从 JAX-WS (JAX_RS) 中的 json 请求中获取动态字段
问题描述
我有一个 api,我正在接收一个 json 格式的 Java pojo 请求:
{
"migrationId" : "32n2342342j";
"someDynamicField" : {"A" : "",
"B" : ""}
}
这someDynamicField
可以有不同的属性名称,我需要从中添加数据。
我不能为这个模型设置一个类,因为该字段是动态的。
但可以肯定的是,这someDynamicField
将是字符串类型,但名称会有所不同。
有一件事是肯定的,它someDynamicField
可以是有限集合中的一个字符串,例如:[“move”,“source”....],这个集合将来会增长。
例如 :
{
"migrationId" : "32n2342342j";
"move" : {"sourHost" : "",
"targetHost" : ""}
}
有时可以
{
"migrationId" : "32n2342342j";
"delete" : {"sourHost" : "",
"targetHost" : ""}
}
从请求中提取此信息的最佳方法是什么?
我试着看看这个:How to map dynamic JSON in JAX-RS
Here they use the vairable name explicit and in my case the field is dynamic?
解决方案
我会用一个字符串而不是一个对象并用杰克逊解析它。这不是完整的代码,但类似于:
@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces({MediaType.APPLICATION_JSON})
@Path("/blah")
public Response myMethod(String inputObject) {
ObjectMapper objectMapper = new ObjectMapper();
JsonNode jsonNode = objectMapper.readTree(inputObject);
String migrationId = jsonNode.get("migrationId");
if( jsonNode.has("move") ) {
handleMoveNode(jsonNode.get("move"));
}
else if( jsonNode.has("delete") ) {
handleDeleteNode(jsonNode.get("delete"));
}
// handle the other node types
return Response.ok().build();
}
关键是在您的 JAX-RS 方法中获取一个字符串并自己解析它。
推荐阅读
- php - 当项目从特定状态移动到另一个特定状态时更新/设置 SQL 查询时间戳
- python - 使用python使用标签存储大量时间序列数据的更好方法
- c# - Winforms DataGridView.Rows.Cells[] -> 哪个更快?Cells[int] 或 Cells[string]
- bash - Bash:根据匹配的子字符串替换一列中的整个字符串
- java - 避免 JPA 抽象类额外表
- javascript - 仅通过 JS 禁用滚动
- python - 如何确定某些内容来自标准库还是 Python3 上的外部库?
- c - 将文件中的值添加到数组直到某个字符
- c# - 键入时VSCode C#缺少建议文档工具提示
- python - Python - Pandas 描述抛出错误:不可散列的类型“dict”