说我已经注册了2个org.springframework.http.converter.HttpMessageConverter<T>
个对象:
HttpMessageConverter<Foo>
将HTTP消息转换为Foo.class的实例并支持Content-Type&#34; application / foo&#34; HttpMessageConverter<Bar>
将HTTP消息转换为Bar.class实例并支持Content-Type&#34; application / bar&#34; 我有以下Rest端点,它消耗了上述两个:
@RequestMapping(value = "/foobar", method = POST,
consumes = {"application/foo", "application/bar"}
public String readFooBar(???){
...
}
&#34; ???&#34;中的参数定义是Foo foo, Bar bar
,Object canBeFooOrBar
,然后在我的逻辑或其他内容中向下转换?
简而言之,处理2个不同的RequestMapping消耗产生2个不同对象的最简单方法是什么?
答案 0 :(得分:1)
控制器方法和任何其他Java方法之间没有区别。如果一个方法有一个参数,但是你想传递两个不同的对象类型(Foo,Bar),那么这些类型必须共享一个共同的超类型(并且Object
不计算,除非在非常特殊的情况下)。 / p>
如果超类型具有方法(doWork),则Foo和Bar将仅共享超类型,并且Foo和Bar中此方法的实现包含所有特殊处理逻辑(如Runnable
)。如果您需要在Controller方法中执行instance of
,那么您应该有两个Controller方法,因为那时Foo和Bar不相关。这些是处理聚合物类型的一般规则。
答案 1 :(得分:0)
感谢Klaus Groenbaek的精彩解释,我通过以下方式解决了我的问题:
update Names set City = replace(City, "%New Yorks%", "New York");