2017-01-26 1 views
0

dire que je me suis inscrit 2 org.springframework.http.converter.HttpMessageConverter<T> objets:plusieurs objets HttpMessageConverter pour un point final ayant plusieurs consume

  1. HttpMessageConverter<Foo> qui convertit le message HTTP à une instance de Foo.class et prend en charge Content-Type "application/foo"
  2. HttpMessageConverter<Bar> qui convertit le message HTTP à une instance de Bar.class et prend en charge Content-type "application/bar"

J'ai le point final ci-dessous le repos qui consomme deux t il au-dessus:

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

Quelle définition paramètre va dans le « ??? », est-il Foo foo, Bar bar, Object canBeFooOrBar puis baissés dans ma logique, ou autre chose? En bref, quelle est la manière la plus simple de traiter 2 consommations RequestMapping distinctes qui génèrent 2 objets différents?

Répondre

0

Merci à la belle explication par Klaus Groenbaek, je résolu mon problème en faisant:

@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){ 
    ... 
} 
1

Il n'existe aucune différence entre la méthode du contrôleur et toute autre méthode Java. Si une méthode a un argument, mais que vous voulez passer deux types d'objets différents (Foo, Bar), alors ces types doivent partager un super type commun (et Object ne compte pas, sauf dans des cas très spéciaux). Foo et Bar ne partageraient un type super, si le super type a une méthode (doWork), et l'implémentation de cette méthode dans Foo and Bar contient toute la logique de traitement spécial (comme Runnable). Si vous avez besoin de faire instance of dans votre méthode de contrôleur, alors vous devriez avoir deux méthodes de contrôleur, parce que Foo et Bar ne sont pas liés. Ces règles générales pour travailler avec des types polymériques.