2016-04-08 19 views
1

İki ayrı denetleyici için aynı MediaType ürününe sahip iki farklı HttpMessageConverters yapılandırmak istiyorum. Bunun nedeni, farklı JSON biçimlerini kullanan bazı harici hizmetler olmasıdır. Onları değiştiremeyiz.2 Kontrolör için 2 farklı MessageConverters Yapılandırma

Mümkün mü? İki WebMvcConfigurerAdapters oluşturabilir ve trafiği bir şekilde bölebilir miyim? Mümkünse, iyi bir uygulama mı?

+0

mi:

public class MoxyMessageConverter extends AbstractHttpMessageConverter<Object> { private final JAXBContext jAXBContext; private String[] supportedPackages = { ... }; // some defaults public MoxyMessageConverter(JAXBContext jAXBContext) { this.jAXBContext = jAXBContext; } public String[] getSupportedPackages() { return supportedPackages; } public void setSupportedPackages(String[] supportedPackages) { this.supportedPackages = supportedPackages; } @Override protected boolean supports(Class<?> clazz) { String packageName = clazz.getPackage().getName(); for (String supportedPackage : supportedPackages) { if (packageName.startsWith(supportedPackage)) return true; } return false; } @Override protected Object readInternal(Class<?> clazz, HttpInputMessage inputMessage) throws IOException, HttpMessageNotReadableException { .. } @Override protected void writeInternal(Object object, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException { .. } } 

ve @Configuration sınıfında

? –

+0

Her istek ve yanıt için aynı MC. Fakat denetleyiciye/yola bağlı olarak farklı MC'ler için. –

+0

Ben 'ControllerAdvice' ile birlikte bir şey kullanarak önermek için gidiyordum ama bu sadece 'response' işlemek ... :( –

cevap

0

Son olarak, bu sorunu, MessageConverter'ın jaxbcontext'ini yapılandırmak ve desteklenen paketleri atamak için possiblity ekleyerek geçersiz kıldım. Böylece, aynı denetleyici için 2 farklı MesssageConverters oluşturabilir ve bir geri dönüş sınıfına bağlı olarak birini kullanabilirim.

bir `request` veya` response` için
@Configuration 
@EnableWebMvc 
@EnableTransactionManagement 
public class WebMvcConfiguration extends WebMvcConfigurerAdapter { 

    @Override 
    public void extendMessageConverters(List<HttpMessageConverter<?>> converters) { 
    super.extendMessageConverters(converters); 
    MoxyMessageConverter defaultMessageConverter = new MoxyMessageConverter(defaultJAXBContext); 
    defaultMessageConverter.setSupportedPackages(new String[] { "xxx.xxx.xxx.webservices" }); 
    converters.add(0, defaultMessageConverter); 

    MoxyMessageConverter payUMessageConverter = new MoxyMessageConverter(payUJAXBContext); 
    payUMessageConverter.setSupportedPackages(new String[] { "xxx.xxx.xxx.webservices.payu" }); 
    converters.add(0, payUMessageConverter); 
    } 
} 
İlgili konular