Refine search
/** * Creates a new {@link HttpMessageConverter} to support HAL. * * @return */ private static final HttpMessageConverter<?> getHalConverter(List<MediaType> halFlavours) { ObjectMapper mapper = new ObjectMapper(); mapper.registerModule(new Jackson2HalModule()); mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter(); converter.setObjectMapper(mapper); converter.setSupportedMediaTypes(halFlavours); return converter; }
public Jackson2HalModule() { super("json-hal-module", new Version(1, 0, 0, null, "org.springframework.hateoas", "spring-hateoas")); setMixInAnnotation(Link.class, LinkMixin.class); setMixInAnnotation(ResourceSupport.class, ResourceSupportMixin.class); setMixInAnnotation(Resources.class, ResourcesMixin.class); }
@Bean public RestTemplate restTemplate() { final ObjectMapper mapper = new ObjectMapper(); mapper.registerModule(new Jackson2HalModule()); final MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter(); converter.setSupportedMediaTypes(MediaType.parseMediaTypes("application/hal+json")); converter.setObjectMapper(mapper); return new RestTemplate(Collections.<HttpMessageConverter<?>> singletonList(converter)); }
public HttpMessageConverter<?> getHalConverter() { final ObjectMapper objectMapper = new ObjectMapper(); final MappingJackson2HttpMessageConverter halConverter = new TypeConstrainedMappingJackson2HttpMessageConverter(ResourceSupport.class); objectMapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES); objectMapper.registerModule(new Jackson2HalModule()); halConverter.setSupportedMediaTypes(Collections.singletonList(MediaTypes.HAL_JSON)); halConverter.setObjectMapper(objectMapper); return halConverter; } }
public class HalHttpMessageConverter extends AbstractJackson2HttpMessageConverter { public HalHttpMessageConverter() { super(new ObjectMapper(), new MediaType("application", "hal+json", DEFAULT_CHARSET)); objectMapper.registerModule(new Jackson2HalModule()); objectMapper.setHandlerInstantiator(new Jackson2HalModule.HalHandlerInstantiator(new DefaultRelProvider(), null)); // customize your mapper if needed objectMapper.enable(SerializationFeature.INDENT_OUTPUT); } @Override protected boolean supports(Class<?> clazz) { return ResourceSupport.class.isAssignableFrom(clazz); } }
@Override public void extendMessageConverters(List<HttpMessageConverter<?>> converters) { for (HttpMessageConverter<?> converter : converters) { if (converter instanceof MappingJackson2HttpMessageConverter) { MappingJackson2HttpMessageConverter halConverterCandidate = (MappingJackson2HttpMessageConverter) converter; ObjectMapper objectMapper = halConverterCandidate.getObjectMapper(); if (Jackson2HalModule.isAlreadyRegisteredIn(objectMapper)) { return; } } } ObjectMapper objectMapper = mapper.getIfAvailable(); objectMapper = objectMapper == null ? new ObjectMapper() : objectMapper; CurieProvider curieProvider = this.curieProvider.getIfAvailable(); RelProvider relProvider = this.relProvider.getObject(); MessageSourceAccessor linkRelationMessageSource = beanFactory.getBean(MESSAGE_SOURCE_BEAN_NAME, MessageSourceAccessor.class); if (hypermediaTypes.contains(HypermediaType.HAL)) { converters.add(0, createHalConverter(objectMapper, curieProvider, relProvider, linkRelationMessageSource)); } }
public ObjectMapper halObjectMapper() { RelProvider defaultedRelProvider = this.relProvider.orElseGet(() -> new EvoInflectorRelProvider()); HalConfiguration halConfiguration = this.halConfiguration.orElseGet(() -> new HalConfiguration()); HalHandlerInstantiator instantiator = new HalHandlerInstantiator(defaultedRelProvider, curieProvider.orElse(null), resourceDescriptionMessageSourceAccessor(), halConfiguration); ObjectMapper mapper = basicObjectMapper(); mapper.registerModule(persistentEntityJackson2Module()); mapper.registerModule(new Jackson2HalModule()); mapper.setHandlerInstantiator(instantiator); return mapper; }
@Bean @ConditionalOnBean(StreamDefinitionRepository.class) public SkipperClient skipperClient(SkipperClientProperties properties, RestTemplateBuilder restTemplateBuilder, ObjectMapper objectMapper) { objectMapper.registerModule(new Jackson2HalModule()); objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); RestTemplate restTemplate = restTemplateBuilder .errorHandler(new SkipperClientResponseErrorHandler(objectMapper)) .interceptors(new OAuth2AccessTokenProvidingClientHttpRequestInterceptor()) .messageConverters(Arrays.asList(new StringHttpMessageConverter(), new MappingJackson2HttpMessageConverter(objectMapper))) .build(); return new DefaultSkipperClient(properties.getServerUri(), restTemplate); }
/** * @param objectMapper * @param curieProvider * @param relProvider * @param linkRelationMessageSource * @return */ private MappingJackson2HttpMessageConverter createHalConverter(ObjectMapper objectMapper, CurieProvider curieProvider, RelProvider relProvider, MessageSourceAccessor linkRelationMessageSource) { ObjectMapper mapper = objectMapper.copy(); mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES); mapper.registerModule(new Jackson2HalModule()); mapper.setHandlerInstantiator(new HalHandlerInstantiator(relProvider, curieProvider, linkRelationMessageSource, this.halConfiguration.getIfAvailable(HalConfiguration::new))); return new TypeConstrainedMappingJackson2HttpMessageConverter( ResourceSupport.class, Arrays.asList(HAL_JSON, HAL_JSON_UTF8), mapper); } }
// retrieve the object mapper from the messageConverter RelProvider provider = beanFactory.getBean("relProvider", RelProvider.class); ObjectMapper mapper = (ObjectMapper) objectMapper; mapper.registerModule(new Jackson2HalModule()); mapper.setHandlerInstantiator(new Jackson2HalModule.HalHandlerInstantiator(provider, null)); mapper.enable(SerializationFeature.INDENT_OUTPUT);
final MappingJackson2HttpMessageConverter jacksonConverter = (MappingJackson2HttpMessageConverter) converter; jacksonConverter.getObjectMapper() .registerModule(new Jackson2HalModule()) .addMixIn(JobExecution.class, JobExecutionJacksonMixIn.class) .addMixIn(JobParameters.class, JobParametersJacksonMixIn.class) .addMixIn(JobParameter.class, JobParameterJacksonMixIn.class) .addMixIn(JobInstance.class, JobInstanceJacksonMixIn.class)
/** * Will augment the provided {@link RestTemplate} with the Jackson * * Furthermore, this method will also register the {@link Jackson2HalModule} * * @param restTemplate Can be null. Instantiates a new {@link RestTemplate} if null * @return RestTemplate with the required Jackson Mixins */ public static RestTemplate prepareRestTemplate(RestTemplate restTemplate) { if (restTemplate == null) { restTemplate = new RestTemplate(); } restTemplate.setErrorHandler(new VndErrorResponseErrorHandler(restTemplate.getMessageConverters())); boolean containsMappingJackson2HttpMessageConverter = false; for(HttpMessageConverter<?> converter : restTemplate.getMessageConverters()) { if (converter instanceof MappingJackson2HttpMessageConverter) { containsMappingJackson2HttpMessageConverter = true; final MappingJackson2HttpMessageConverter jacksonConverter = (MappingJackson2HttpMessageConverter) converter; jacksonConverter.getObjectMapper() .registerModule(new Jackson2HalModule()); } } if (!containsMappingJackson2HttpMessageConverter) { throw new IllegalArgumentException("The RestTemplate does not contain a required MappingJackson2HttpMessageConverter."); } return restTemplate; }
@Bean public Module Jackson2HalModule() { return new Jackson2HalModule(); } }
public RestTemplate getRestTemplateWithHalMessageConverter() { RestTemplate restTemplate = new RestTemplate(); List<HttpMessageConverter<?>> existingConverters = restTemplate.getMessageConverters(); List<HttpMessageConverter<?>> newConverters = new ArrayList<>(); newConverters.add(getHalMessageConverter()); newConverters.addAll(existingConverters); restTemplate.setMessageConverters(newConverters); return restTemplate; } private HttpMessageConverter getHalMessageConverter() { ObjectMapper objectMapper = new ObjectMapper(); objectMapper.registerModule(new Jackson2HalModule()); MappingJackson2HttpMessageConverter halConverter = new TypeConstrainedMappingJackson2HttpMessageConverter(ResourceSupport.class); halConverter.setSupportedMediaTypes(Arrays.asList(HAL_JSON)); halConverter.setObjectMapper(objectMapper); return halConverter; }
@Bean public RestTemplateBuilder builder() { return new RestTemplateBuilder() .defaultMessageConverters() .additionalMessageConverters(halMessageConverter()); } private HttpMessageConverter halMessageConverter() { ObjectMapper objectMapper = new ObjectMapper().registerModule(new Jackson2HalModule()); TypeConstrainedMappingJackson2HttpMessageConverter halConverter = new TypeConstrainedMappingJackson2HttpMessageConverter(ResourceSupport.class); halConverter.setSupportedMediaTypes(Collections.singletonList(MediaTypes.HAL_JSON)); halConverter.setObjectMapper(objectMapper); return halConverter; }
TypeConstrainedMappingJackson2HttpMessageConverter messageConverter = new TypeConstrainedMappingJackson2HttpMessageConverter(ResourceSupport.class); messageConverter.setSupportedMediaTypes(Arrays.asList(MediaTypes.HAL_JSON)); ObjectMapper objectMapper = messageConverter.getObjectMapper(); objectMapper.registerModule(new Jackson2HalModule()); objectMapper.setHandlerInstantiator( new Jackson2HalModule.HalHandlerInstantiator(new DefaultRelProvider(), null)); MockMvc mockMvc = MockMvcBuilders.standaloneSetup(testObject) .setMessageConverters(messageConverter).build();
/** * @param objectMapper * @param curieProvider * @param relProvider * @param linkRelationMessageSource * @return */ private MappingJackson2HttpMessageConverter createHalConverter(ObjectMapper objectMapper, CurieProvider curieProvider, RelProvider relProvider, MessageSourceAccessor linkRelationMessageSource) { HalConfiguration halConfiguration = this.halConfiguration.getIfAvailable(); halConfiguration = halConfiguration == null ? new HalConfiguration() : halConfiguration; HalHandlerInstantiator instantiator = new Jackson2HalModule.HalHandlerInstantiator(relProvider, curieProvider, linkRelationMessageSource, halConfiguration); ObjectMapper mapper = objectMapper.copy(); mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES); mapper.registerModule(new Jackson2HalModule()); mapper.setHandlerInstantiator(instantiator); MappingJackson2HttpMessageConverter converter = new TypeConstrainedMappingJackson2HttpMessageConverter( ResourceSupport.class); converter.setSupportedMediaTypes(Arrays.asList(HAL_JSON, HAL_JSON_UTF8)); converter.setObjectMapper(mapper); return converter; } }
containsMappingJackson2HttpMessageConverter = true; final MappingJackson2HttpMessageConverter jacksonConverter = (MappingJackson2HttpMessageConverter) converter; jacksonConverter.getObjectMapper().registerModule(new Jackson2HalModule()) .addMixIn(JobExecution.class, JobExecutionJacksonMixIn.class) .addMixIn(JobParameters.class, JobParametersJacksonMixIn.class) .addMixIn(JobParameter.class, JobParameterJacksonMixIn.class) .addMixIn(JobInstance.class, JobInstanceJacksonMixIn.class)
private ObjectMapper configureObjectMapper() { return Jackson2ObjectMapperBuilder.json() .modules(new Jackson2HalModule()) .handlerInstantiator(new Jackson2HalModule.HalHandlerInstantiator( new DelegatingRelProvider( OrderAwarePluginRegistry.create(Arrays.asList( new EvoInflectorRelProvider(), new AnnotationRelProvider()))), null)) .build(); }
@Provider public class JacksonContextResolver implements ContextResolver<ObjectMapper> { private final ObjectMapper mapper = new ObjectMapper(); public JacksonContextResolver() { mapper.registerModule(new Jackson2HalModule()); mapper.setHandlerInstantiator(new HalHandlerInstantiator( new AnnotationRelProvider(), null, null)); } @Override public ObjectMapper getContext(Class<?> type) { return mapper; } }