#470 - Added HAL JSON UTF-8 variant to MediaTypes.
Added application/hal+json;charset=UTF-8 to the media types enum. Traverson now configures all HAL flavors to be supported by the registered HAL-specific HttpMessageConverter. Removed nullability of media type in JsonPathLinkDiscoverer. This requires subclasses that want to support all media types to explicitly configure MediaType.ALL. Heavily inspired by the PR submitted by @drummond but very significantly rewritten.
This commit is contained in:
@@ -21,6 +21,7 @@ import java.net.URI;
|
||||
import java.nio.charset.Charset;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
@@ -130,13 +131,34 @@ public class Traverson {
|
||||
List<HttpMessageConverter<?>> converters = new ArrayList<HttpMessageConverter<?>>();
|
||||
converters.add(new StringHttpMessageConverter(Charset.forName("UTF-8")));
|
||||
|
||||
if (mediaTypes.contains(MediaTypes.HAL_JSON)) {
|
||||
converters.add(getHalConverter());
|
||||
List<MediaType> halFlavors = getHalJsonFlavors(mediaTypes);
|
||||
|
||||
if (!halFlavors.isEmpty()) {
|
||||
converters.add(getHalConverter(halFlavors));
|
||||
}
|
||||
|
||||
return converters;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns all HAL JSON compatible media types from the given list.
|
||||
*
|
||||
* @param mediaTypes must not be {@literal null}.
|
||||
* @return
|
||||
*/
|
||||
private static List<MediaType> getHalJsonFlavors(Collection<MediaType> mediaTypes) {
|
||||
|
||||
List<MediaType> result = new ArrayList<MediaType>();
|
||||
|
||||
for (MediaType mediaType : mediaTypes) {
|
||||
if (MediaTypes.HAL_JSON.isCompatibleWith(mediaType)) {
|
||||
result.add(mediaType);
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
private static final RestOperations createDefaultTemplate(List<MediaType> mediaTypes) {
|
||||
|
||||
RestTemplate template = new RestTemplate();
|
||||
@@ -150,7 +172,7 @@ public class Traverson {
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
private static final HttpMessageConverter<?> getHalConverter() {
|
||||
private static final HttpMessageConverter<?> getHalConverter(List<MediaType> halFlavours) {
|
||||
|
||||
ObjectMapper mapper = new ObjectMapper();
|
||||
mapper.registerModule(new Jackson2HalModule());
|
||||
@@ -159,7 +181,7 @@ public class Traverson {
|
||||
MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
|
||||
|
||||
converter.setObjectMapper(mapper);
|
||||
converter.setSupportedMediaTypes(Arrays.asList(MediaTypes.HAL_JSON));
|
||||
converter.setSupportedMediaTypes(halFlavours);
|
||||
|
||||
return converter;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user