mirror of
https://github.com/scm-manager/scm-manager.git
synced 2025-11-12 16:35:45 +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 com.fasterxml.jackson.databind.JsonNode;
|
||||||
|
|
||||||
import javax.annotation.Priority;
|
import javax.annotation.Priority;
|
||||||
import javax.ws.rs.Priorities;
|
|
||||||
import javax.ws.rs.container.ContainerRequestContext;
|
import javax.ws.rs.container.ContainerRequestContext;
|
||||||
import javax.ws.rs.container.ContainerResponseContext;
|
import javax.ws.rs.container.ContainerResponseContext;
|
||||||
import javax.ws.rs.container.ContainerResponseFilter;
|
import javax.ws.rs.container.ContainerResponseFilter;
|
||||||
import javax.ws.rs.core.MultivaluedMap;
|
import javax.ws.rs.core.MultivaluedMap;
|
||||||
import javax.ws.rs.ext.Provider;
|
import javax.ws.rs.ext.Provider;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.List;
|
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@@ -19,14 +17,14 @@ import static java.util.Collections.emptyList;
|
|||||||
import static java.util.Optional.ofNullable;
|
import static java.util.Optional.ofNullable;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>Post processor for rest requests filtering json responses when a {@value PARAMETER_FIELDS} query
|
* <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
|
* 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>
|
* 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
|
* <p>This requires the {@link JsonMarshallingResponseFilter} to be processed first to create
|
||||||
* the {@link JsonNode} tree.</p>
|
* the {@link JsonNode} tree.</p>
|
||||||
*/
|
*/
|
||||||
@Provider
|
@Provider
|
||||||
@Priority(Priorities.USER)
|
@Priority(FilterPriorities.FIELD_FILTER)
|
||||||
public class FieldContainerResponseFilter implements ContainerResponseFilter {
|
public class FieldContainerResponseFilter implements ContainerResponseFilter {
|
||||||
|
|
||||||
private static final String PARAMETER_FIELDS = "fields";
|
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.annotation.Priority;
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
import javax.ws.rs.Priorities;
|
|
||||||
import javax.ws.rs.container.ContainerRequestContext;
|
import javax.ws.rs.container.ContainerRequestContext;
|
||||||
import javax.ws.rs.container.ContainerResponseContext;
|
import javax.ws.rs.container.ContainerResponseContext;
|
||||||
import javax.ws.rs.container.ContainerResponseFilter;
|
import javax.ws.rs.container.ContainerResponseFilter;
|
||||||
@@ -16,11 +15,11 @@ import javax.ws.rs.ext.Provider;
|
|||||||
import java.util.Set;
|
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.
|
* and processes all registered plugins for the {@link JsonEnricher} extension point.
|
||||||
*/
|
*/
|
||||||
@Provider
|
@Provider
|
||||||
@Priority(Priorities.USER + 1000)
|
@Priority(FilterPriorities.JSON_MARSHALLING)
|
||||||
public class JsonMarshallingResponseFilter implements ContainerResponseFilter {
|
public class JsonMarshallingResponseFilter implements ContainerResponseFilter {
|
||||||
|
|
||||||
private final ObjectMapper objectMapper;
|
private final ObjectMapper objectMapper;
|
||||||
|
|||||||
Reference in New Issue
Block a user