具有多个消耗的一个端点的多个HttpMessageConverter对象

时间:2017-01-26 15:43:57

标签: spring rest spring-mvc spring-boot spring-rest

说我已经注册了2个org.springframework.http.converter.HttpMessageConverter<T>个对象:

  1. HttpMessageConverter<Foo>将HTTP消息转换为Foo.class的实例并支持Content-Type&#34; application / foo&#34;
  2. HttpMessageConverter<Bar>将HTTP消息转换为Bar.class实例并支持Content-Type&#34; application / bar&#34;
  3. 我有以下Rest端点,它消耗了上述两个:

    @RequestMapping(value = "/foobar", method = POST,
        consumes = {"application/foo", "application/bar"}
    public String readFooBar(???){
        ...
    }
    

    &#34; ???&#34;中的参数定义是Foo foo, Bar barObject canBeFooOrBar,然后在我的逻辑或其他内容中向下转换?

    简而言之,处理2个不同的RequestMapping消耗产生2个不同对象的最简单方法是什么?

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");
相关问题