具有多个消费的一个端点的多个 HttpMessageConverter 对象
Multiple HttpMessageConverter objects for one endpoint having multiple consumes
假设我注册了 2 org.springframework.http.converter.HttpMessageConverter<T>
个对象:
HttpMessageConverter<Foo>
将 HTTP 消息转换为 Foo.class 的实例并支持内容类型 "application/foo"
HttpMessageConverter<Bar>
将 HTTP 消息转换为 Bar.class 的实例并支持内容类型 "application/bar"
我有下面的 Rest 端点,它同时使用了以上两个:
@RequestMapping(value = "/foobar", method = POST,
consumes = {"application/foo", "application/bar"}
public String readFooBar(???){
...
}
“???”中的参数定义是什么,是Foo foo, Bar bar
、Object canBeFooOrBar
然后按照我的逻辑向下转换,还是其他?
简而言之,处理生成 2 个不同对象的 2 个单独 RequestMapping 消费的最简单方法是什么?
控制器方法与任何其他 Java 方法没有区别。如果一个方法有一个参数,但你想传递两种不同的对象类型(Foo,Bar),那么这些类型必须共享一个公共的超类型(并且 Object
不算,除非在非常特殊的情况下)。
Foo和Bar只会共享一个超类型,如果超类型有一个方法(doWork),并且这个方法在Foo和Bar中的实现包含了所有特殊的处理逻辑(如Runnable
) .如果你需要在你的 Controller 方法中做 instance of
,那么你应该有两个 Controller 方法,因为 Foo 和 Bar 是不相关的。这些是使用聚合类型的一般规则。
感谢 的精彩解释,我通过以下方式解决了我的问题:
@RequestMapping(value = "/foobar", method = POST,
consumes = {"application/foo"}
public String readFoo(Foo foo){
...
}
@RequestMapping(value = "/foobar", method = POST,
consumes = {"application/bar"}
public String readBar(Bar bar){
...
}
假设我注册了 2 org.springframework.http.converter.HttpMessageConverter<T>
个对象:
HttpMessageConverter<Foo>
将 HTTP 消息转换为 Foo.class 的实例并支持内容类型 "application/foo"HttpMessageConverter<Bar>
将 HTTP 消息转换为 Bar.class 的实例并支持内容类型 "application/bar"
我有下面的 Rest 端点,它同时使用了以上两个:
@RequestMapping(value = "/foobar", method = POST,
consumes = {"application/foo", "application/bar"}
public String readFooBar(???){
...
}
“???”中的参数定义是什么,是Foo foo, Bar bar
、Object canBeFooOrBar
然后按照我的逻辑向下转换,还是其他?
简而言之,处理生成 2 个不同对象的 2 个单独 RequestMapping 消费的最简单方法是什么?
控制器方法与任何其他 Java 方法没有区别。如果一个方法有一个参数,但你想传递两种不同的对象类型(Foo,Bar),那么这些类型必须共享一个公共的超类型(并且 Object
不算,除非在非常特殊的情况下)。
Foo和Bar只会共享一个超类型,如果超类型有一个方法(doWork),并且这个方法在Foo和Bar中的实现包含了所有特殊的处理逻辑(如Runnable
) .如果你需要在你的 Controller 方法中做 instance of
,那么你应该有两个 Controller 方法,因为 Foo 和 Bar 是不相关的。这些是使用聚合类型的一般规则。
感谢
@RequestMapping(value = "/foobar", method = POST,
consumes = {"application/foo"}
public String readFoo(Foo foo){
...
}
@RequestMapping(value = "/foobar", method = POST,
consumes = {"application/bar"}
public String readBar(Bar bar){
...
}