我必须传递2种不同类型的对象的类型苹果或类型橙色在我的Spring Boot控制器方法中的请求身体。
public myResponse myMethod(@ApiParam(value = "myRequest", required = true) @RequestBody Object mulRequest) {
在上面的代码片段中,Object类型的Mul请求可以是类苹果或类橙色。
我想按照下面的逻辑来满足我的要求-
if (mulRequest instanceof apple) {
// process logic...
} else if (mulRequest instanceof orange) {
// process...
}
但是我坚持如何根据传递的 RequestBody 强制转换为相关的类对象,因为我不知道为 mulRequest 传递了什么类型的对象,可以是苹果类或橙色类。Apple 和 orange 类都实现了可序列化接口。
感谢任何解决此问题的建议或方法。
您正在寻找的是@JsonTypeInfo
和@JsonSubType
Jackson注释,它们正在添加对反序列化的Polymorphizm的支持。
为了让Jackson理解它应该如何反序列化JSON对象,您可能需要在序列化对象时提供一些额外的属性或添加类名-这取决于您将决定使用的反序列化策略。
DTO和Controller的示例实现可能如下:
@JsonTypeInfo(use = Id.NAME, include = As.PROPERTY, property = "type")
@JsonSubTypes({
@JsonSubTypes.Type(value = Apple.class, name = "apple"),
@JsonSubTypes.Type(value = Orange.class, name = "orange")
})
public abstract class Fruit implements Serializable { // basically you do not need this Serializable at all here
String someData;
//...
// note that we can but we do not need to define 'type' field!
// Jackson will handle it if it will appear in JSON
}
public class Orange extends Fruit {
//...
}
public class Apple extends Fruit {
//...
}
那么当你的JSON看起来像
{
"someData": "test",
"type": "orange"
}
并且您将提供以下控制器
public myResponse myMethod(@ApiParam(value = "myRequest", required = true) @RequestBody Fruit mulRequest) {
然后可以测试Mul请求
是Apple
还是奥兰治
。当然你不能使用那里的Object
类,因为你不能用Jackson注释来注释它,但是也许提供自定义反序列化器你就可以实现它。但是这会非常非常可疑
请阅读以下文章以更好地理解这一点:
下面是我的实际控制人课: 我得到了一个例外:
嗨,我正在构建JavaFX项目,我正在使用JavaFX Scene Builder2。我想将我的控制器链接到我的fxml文件,但是我看不到在Scene Builder2中添加控制器到我的fxml文件的可能性。我在想是否有人能帮我一下。谢谢你。
我继续并在内部的方法中执行一些逻辑。 我尝试在url中传递object,重定向到另一个页面,并显示关于person的信息,但面对的是。
我正试图从数据库中删除一个条目。这是我的控制器方法: 这是我的.cshtml: 正如您所看到的,对象不会被传递,并且总是有初始值,因此我得到了一个转储。我的错在哪里? 谢谢.
控制器类 mininet.node.Controller 控制器基类。默认的控制器是一个参考的实现,controller。 表示一个控制器节点。包括 IP 地址、端口等。 主要方法包括启动和停止一个控制器。 init def __init__( self, name, inNamespace=False, command='controller', cargs=
问题内容: 大家好,我正在构建一个JavaFX项目并正在使用JavaFX Scene Builder2。我想将控制器链接到我的fxml文件,但是我看不到在Scene Builder 2中将控制器添加到我的fxml文件的可能性。我想知道是否有人可以帮助我。谢谢。 问题答案: 我偶然在SceneBuilder 2中找到了控制器属性。关闭左侧的层次结构菜单时,将显示“控制器”菜单,可以在其中声明我的控制