mirror of
https://github.com/scm-manager/scm-manager.git
synced 2025-11-12 00:15:44 +01:00
Added custom JAX RS Filter priorities
This commit is contained in:
@@ -3,14 +3,12 @@ package sonia.scm.api.v2;
|
||||
import com.fasterxml.jackson.databind.JsonNode;
|
||||
|
||||
import javax.annotation.Priority;
|
||||
import javax.ws.rs.Priorities;
|
||||
import javax.ws.rs.container.ContainerRequestContext;
|
||||
import javax.ws.rs.container.ContainerResponseContext;
|
||||
import javax.ws.rs.container.ContainerResponseFilter;
|
||||
import javax.ws.rs.core.MultivaluedMap;
|
||||
import javax.ws.rs.ext.Provider;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@@ -19,14 +17,14 @@ import static java.util.Collections.emptyList;
|
||||
import static java.util.Optional.ofNullable;
|
||||
|
||||
/**
|
||||
* <p>Post processor for rest requests filtering json responses when a {@value PARAMETER_FIELDS} query
|
||||
* parameter is provided. In this case, only the given fields will returned. It is possible, to specify
|
||||
* paths for nested fields. Multiple fields have to be devided using {@value FIELD_SEPARATOR}.</p>
|
||||
* <p>Post processor for REST requests filtering JSON responses when a {@value PARAMETER_FIELDS} query
|
||||
* parameter is provided. In this case, only the given fields will returned. It is possible to specify
|
||||
* paths for nested fields. Multiple fields have to be separated using {@value FIELD_SEPARATOR}.</p>
|
||||
* <p>This requires the {@link JsonMarshallingResponseFilter} to be processed first to create
|
||||
* the {@link JsonNode} tree.</p>
|
||||
*/
|
||||
@Provider
|
||||
@Priority(Priorities.USER)
|
||||
@Priority(FilterPriorities.FIELD_FILTER)
|
||||
public class FieldContainerResponseFilter implements ContainerResponseFilter {
|
||||
|
||||
private static final String PARAMETER_FIELDS = "fields";
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
package sonia.scm.api.v2;
|
||||
|
||||
|
||||
import javax.ws.rs.Priorities;
|
||||
|
||||
/**
|
||||
* A collection of filter priorities used by custom {@link javax.ws.rs.container.ContainerResponseFilter}s.
|
||||
*/
|
||||
final class FilterPriorities {
|
||||
|
||||
/**
|
||||
* Other filters depend on already marshalled {@link com.fasterxml.jackson.databind.JsonNode} trees. Thus, JSON
|
||||
* marshalling has to happen before those filters
|
||||
*/
|
||||
static final int JSON_MARSHALLING = Priorities.USER + 1000;
|
||||
static final int FIELD_FILTER = JSON_MARSHALLING - 1000;
|
||||
|
||||
private FilterPriorities() {
|
||||
}
|
||||
}
|
||||
@@ -8,7 +8,6 @@ import sonia.scm.web.VndMediaType;
|
||||
|
||||
import javax.annotation.Priority;
|
||||
import javax.inject.Inject;
|
||||
import javax.ws.rs.Priorities;
|
||||
import javax.ws.rs.container.ContainerRequestContext;
|
||||
import javax.ws.rs.container.ContainerResponseContext;
|
||||
import javax.ws.rs.container.ContainerResponseFilter;
|
||||
@@ -16,11 +15,11 @@ import javax.ws.rs.ext.Provider;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* Transforms json rest responses to {@link JsonNode} trees to support further post processing
|
||||
* Transforms JSON REST responses to {@link JsonNode} trees to support further post processing
|
||||
* and processes all registered plugins for the {@link JsonEnricher} extension point.
|
||||
*/
|
||||
@Provider
|
||||
@Priority(Priorities.USER + 1000)
|
||||
@Priority(FilterPriorities.JSON_MARSHALLING)
|
||||
public class JsonMarshallingResponseFilter implements ContainerResponseFilter {
|
||||
|
||||
private final ObjectMapper objectMapper;
|
||||
|
||||
Reference in New Issue
Block a user