{“query”:“”,“variables”:{“input”:{“name”:“”}}}
3.{“query”:“”,“variables”:{“search”:“”}}
我不想在我的API中传递所有的参数作为请求体,有些只有查询、变量、输入有些只有查询和变量,就像上面的json数据,我想创建相同的模型,可以在其余的API中使用。目前,我已经为每个API创建了不同的模型。
公共类CreatetRequest{
private String query;
private Variables variables;
}
public class Variables {
private Input input;
}
public class Input {
private String name;
private String description;
private String gitUrl;
private String repoName;
}
这里我在所有API中复制了我的模型,所以我想创建三个模型类,其中包含所有必需的变量,这些变量在我的引导应用程序中都是常见的,但同时我必须避免在rest API的request Body..中发送所有数据。
在spring应用程序中,避免这种锅炉板代码的最佳方法是什么
使用带有@JsonDeserialize注释的接口
import com.fasterxml.jackson.annotation.JsonSubTypes;
import com.fasterxml.jackson.annotation.JsonSubTypes.Type;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
@JsonDeserialize(using = InputDeserializer.class)
public interface InputInterface {
}
实现此接口的输入对象类型1
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
@JsonDeserialize(as = Type1.class)
public class Type1 implements InputInterface {
private String name;
private String description;
private String gitUrl;
private String repoName;
// setters, getters, constructor
}
实现此接口的输入对象类型2
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
@JsonDeserialize(as = Type2.class)
public class Type2 implements InputInterface{
String name;
// setters, getters, constructor
}
在这里,为了简化,我们只使用了两种类型。
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
public class InputDeserializer extends JsonDeserializer<InputInterface> {
@Override
public InputInterface deserialize(JsonParser jp, DeserializationContext context) throws IOException {
ObjectMapper mapper = (ObjectMapper) jp.getCodec();
ObjectNode root = mapper.readTree(jp);
/*
Write your conditions here
to check what type of input is
*/
if (root.has("name") && root.has("description")) {
return mapper.readValue(root.toString(), Type1.class);
} else {
return mapper.readValue(root.toString(), Type2.class);
}
}
}
使用控制器中的接口
@PostMapping()
public void save(@RequestBody InputInterface input) throws Exception {
// save the customer using service
System.out.println(input);
}
这只是为了说明它是如何工作的,让它适应你的需要:-)
我正在使用XML构建调查。调查中的一个(矩阵)问题,具有列和行,如下所示: 我想使用不同的XSLT模板,这取决于 节点。因此,尽管所有问题都是以相同的方式构建的,但它们看起来可能不同。我想用不同的。每个问题类型的XSLT文件,定义问题、列和行的外观。 如果我使用以下代码包括“模块/模板”: 该模板包含问题、行和列的格式定义。如果同一页面上有不同类型的问题,会不会出现干扰,因为定义每种类型的问题、行
假设我有一个表'some-table',我想在多个模式中创建它。名为“create-some-table.yaml”的文件 最后一个是changelog-master,它非常简单 有什么办法我可以做类似这样的事情吗,谢谢:)
我们已经讲到了如何使用模块名称作为调用的一部分,来调用模块中的函数,如示例 7-7 中所示的 nested_modules 函数调用。 文件名: src/main.rs 示例 7-7:通过完全指定模块中的路径来调用函数 如你所见,指定函数的完全限定名称可能会非常冗长。所幸 Rust 有一个关键字使得这些调用显得更简洁。 Rust 的 use 关键字能将你想要调用的函数所在的模块引入到当前作用域中,
我在多模块项目中工作。目前我面临以下问题: > 模块A 模块B 模块A依赖于B 模块A有以下方法@GetMapping(path=“/GetWorkspace”) } 模块B有以下方法,我需要使用模块A提到的endpoint 公共字符串consumeModuelAMethod(){ 当我从模块A通过RestTemboard调用“http://localhost:8080/getworkspaces
我有两个外部模型相同的API,所以我为外部模型(ResponseModel)和结果键创建了一个模型类,我为结果键创建了一个名为ResultModel的类,所以我可能能够编写结果键上可能出现的所有响应 在这里,我添加了ResultModel结果键中可能的响应,将给出国家列表或州列表 CountryList API 1结果 状态列表API 2结果 我遵循这个结构来重用外部模型。但它不起作用 不管怎样,