protected MappingJackson2MessageConverter createJacksonConverter() { DefaultContentTypeResolver resolver = new DefaultContentTypeResolver(); resolver.setDefaultMimeType(MimeTypeUtils.APPLICATION_JSON); MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter(); converter.setContentTypeResolver(resolver); return converter; }
@Override public String toString() { return "CompositeMessageConverter[converters=" + getConverters() + "]"; }
/** * Whether to use the {@link DefaultPrettyPrinter} when writing JSON. * This is a shortcut for setting up an {@code ObjectMapper} as follows: * <pre class="code"> * ObjectMapper mapper = new ObjectMapper(); * mapper.configure(SerializationFeature.INDENT_OUTPUT, true); * converter.setObjectMapper(mapper); * </pre> */ public void setPrettyPrint(boolean prettyPrint) { this.prettyPrint = prettyPrint; configurePrettyPrint(); }
private Object convertPayload(Message<?> message, MethodParameter parameter, Class<?> targetPayloadType) { Object result = null; if (this.converter instanceof SmartMessageConverter) { SmartMessageConverter smartConverter = (SmartMessageConverter) this.converter; result = smartConverter.fromMessage(message, targetPayloadType, parameter); } else if (this.converter != null) { result = this.converter.fromMessage(message, targetPayloadType); } if (result == null) { throw new MessageConversionException(message, "No converter found from actual payload type '" + ClassUtils.getDescriptiveType(message.getPayload()) + "' to expected payload type '" + ClassUtils.getQualifiedName(targetPayloadType) + "'"); } return result; }
@Override @Nullable public Object fromMessage(Message<?> message, Class<?> targetClass, @Nullable Object conversionHint) { for (MessageConverter converter : getConverters()) { Object result = (converter instanceof SmartMessageConverter ? ((SmartMessageConverter) converter).fromMessage(message, targetClass, conversionHint) : converter.fromMessage(message, targetClass)); if (result != null) { return result; } } return null; }
@Override @Nullable public Object fromMessage(Message<?> message, Class<?> targetClass) { for (MessageConverter converter : getConverters()) { Object result = converter.fromMessage(message, targetClass); if (result != null) { return result; } } return null; }
@Override @Nullable public Message<?> toMessage(Object payload, @Nullable MessageHeaders headers, @Nullable Object conversionHint) { for (MessageConverter converter : getConverters()) { Message<?> result = (converter instanceof SmartMessageConverter ? ((SmartMessageConverter) converter).toMessage(payload, headers, conversionHint) : converter.toMessage(payload, headers)); if (result != null) { return result; } } return null; }
@Bean public CompositeMessageConverter brokerMessageConverter() { List<MessageConverter> converters = new ArrayList<>(); boolean registerDefaults = configureMessageConverters(converters); if (registerDefaults) { converters.add(new StringMessageConverter()); converters.add(new ByteArrayMessageConverter()); if (jackson2Present) { converters.add(createJacksonConverter()); } } return new CompositeMessageConverter(converters); }
@Override @Nullable public Message<?> toMessage(Object payload, @Nullable MessageHeaders headers) { for (MessageConverter converter : getConverters()) { Message<?> result = converter.toMessage(payload, headers); if (result != null) { return result; } } return null; }
@Override public javax.jms.Message createMessage(Session session) throws JMSException { try { return this.messageConverter.toMessage(this.message, session); } catch (Exception ex) { throw new MessageConversionException("Could not convert '" + this.message + "'", ex); } } }
@Test public void configureMessageConvertersDefault() { AbstractMessageBrokerConfiguration config = new BaseTestMessageBrokerConfig(); CompositeMessageConverter compositeConverter = config.brokerMessageConverter(); List<MessageConverter> converters = compositeConverter.getConverters(); assertThat(converters.size(), Matchers.is(3)); assertThat(converters.get(0), Matchers.instanceOf(StringMessageConverter.class)); assertThat(converters.get(1), Matchers.instanceOf(ByteArrayMessageConverter.class)); assertThat(converters.get(2), Matchers.instanceOf(MappingJackson2MessageConverter.class)); ContentTypeResolver resolver = ((MappingJackson2MessageConverter) converters.get(2)).getContentTypeResolver(); assertEquals(MimeTypeUtils.APPLICATION_JSON, ((DefaultContentTypeResolver) resolver).getDefaultMimeType()); }
@Override @Nullable public final Object fromMessage(Message<?> message, Class<?> targetClass, @Nullable Object conversionHint) { if (!canConvertFrom(message, targetClass)) { return null; } return convertFromInternal(message, targetClass, conversionHint); }
@Nullable protected MimeType getMimeType(@Nullable MessageHeaders headers) { return (headers != null && this.contentTypeResolver != null ? this.contentTypeResolver.resolve(headers) : null); }
@Before public void setup() { this.resolver = new DefaultContentTypeResolver(); }
@JsonView(MyJacksonView1.class) public JacksonViewBean jsonViewResponse() { JacksonViewBean bean = new JacksonViewBean(); bean.setWithView1("with"); bean.setWithView2("with"); bean.setWithoutView("with"); return bean; }
/** * Construct a {@code MappingJackson2MessageConverter} supporting * one or more custom MIME types. * @param supportedMimeTypes the supported MIME types * @since 4.1.5 */ public MappingJackson2MessageConverter(MimeType... supportedMimeTypes) { super(Arrays.asList(supportedMimeTypes)); this.objectMapper = initObjectMapper(); }
@Override @Nullable public final Object fromMessage(Message<?> message, Class<?> targetClass) { return fromMessage(message, targetClass, null); }
@Override @Nullable public final Message<?> toMessage(Object payload, @Nullable MessageHeaders headers) { return toMessage(payload, headers, null); }
@Test public void fromMessage() throws Exception { String payload = "<myBean><name>Foo</name></myBean>"; Message<?> message = MessageBuilder.withPayload(payload.getBytes(StandardCharsets.UTF_8)).build(); MyBean actual = (MyBean) this.converter.fromMessage(message, MyBean.class); assertNotNull(actual); assertEquals("Foo", actual.getName()); }
/** * Construct a {@code MappingJackson2MessageConverter} supporting * the {@code application/json} MIME type with {@code UTF-8} character set. */ public MappingJackson2MessageConverter() { super(new MimeType("application", "json", StandardCharsets.UTF_8)); this.objectMapper = initObjectMapper(); }