The LinkDiscoverer interface is now a Plugin<MediaType> to allow selecting a discoverer per media type. We also provide a LinkDiscoverers wrapper around a PluginRegistry for easier injection. Dropped DefaultLinkDiscoverer as the above mentioned changed prohibits the usage of a discoverer without a media type. Clients that previously used DefaultLinkDiscoverer should switch to JsonPathLinkDiscoverer with a custom JsonPath expression and media type. @EnableHypermediaSupport now supports multiple HypermediaType values set to be able to set up support for multiple hypermedia formats. Admittedly, the only currently supported type is HAL but we prepare for the addition of other (e.g. Collection/JSON or the like). We changed the infrastructure setup taken care of by @EnableHypermediaSupport to not enrich all ObjectMapper instances with our HAL modules but explicitly register an ObjectMapper with the application context and then registering a custom MappingJackson(2)HttpMessageConverter with the HandlerAdapter instances present in the ApplicationContext. We skip the registration if an already registered MJ2HMC has an ObjectMapper already supporting the Spring HATEOAS mixins. Removed some compiler warnings.
63 lines
1.9 KiB
Java
63 lines
1.9 KiB
Java
/*
|
|
* Copyright 2013 the original author or authors.
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
package org.springframework.hateoas;
|
|
|
|
import org.springframework.http.MediaType;
|
|
import org.springframework.plugin.core.PluginRegistry;
|
|
import org.springframework.util.Assert;
|
|
|
|
/**
|
|
* Value object to wrap a {@link PluginRegistry} for {@link LinkDiscoverer} so that it's easier to inject them into
|
|
* clients wanting to lookup a {@link LinkDiscoverer} for a given {@link MediaTypes}.
|
|
*
|
|
* @author Oliver Gierke
|
|
*/
|
|
public class LinkDiscoverers {
|
|
|
|
private final PluginRegistry<LinkDiscoverer, MediaType> discoverers;
|
|
|
|
/**
|
|
* Creates a new {@link LinkDiscoverers} instance with the given {@link PluginRegistry}.
|
|
*
|
|
* @param discoverers must not be {@literal null}.
|
|
*/
|
|
public LinkDiscoverers(PluginRegistry<LinkDiscoverer, MediaType> discoverers) {
|
|
|
|
Assert.notNull(discoverers, "Registry of LinkDiscoverer must not be null!");
|
|
this.discoverers = discoverers;
|
|
}
|
|
|
|
/**
|
|
* Returns the {@link LinkDiscoverer} suitable for the given {@link MediaType}.
|
|
*
|
|
* @param mediaType
|
|
* @return
|
|
*/
|
|
public LinkDiscoverer getLinkDiscovererFor(MediaType mediaType) {
|
|
return discoverers.getPluginFor(mediaType);
|
|
}
|
|
|
|
/**
|
|
* Returns the {@link LinkDiscoverer} suitable for the given media type.
|
|
*
|
|
* @param mediaType
|
|
* @return
|
|
*/
|
|
public LinkDiscoverer getLinkDiscovererFor(String mediaType) {
|
|
return getLinkDiscovererFor(MediaType.valueOf(mediaType));
|
|
}
|
|
}
|