Enable Jackson serialization features

This commit is contained in:
René Pfeuffer
2018-06-04 09:45:11 +02:00
parent 71fa5e100c
commit 28643d541c
5 changed files with 68 additions and 9 deletions

View File

@@ -33,6 +33,7 @@ package sonia.scm.api.rest;
import com.fasterxml.jackson.databind.AnnotationIntrospector;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.databind.introspect.AnnotationIntrospectorPair;
import com.fasterxml.jackson.databind.introspect.JacksonAnnotationIntrospector;
import com.fasterxml.jackson.databind.type.TypeFactory;
@@ -63,6 +64,8 @@ public final class JSONContextResolver implements ContextResolver<ObjectMapper>
.registerModule(new JavaTimeModule());
mapper.setAnnotationIntrospector(createAnnotationIntrospector());
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
mapper.configure(SerializationFeature.WRITE_DATES_WITH_ZONE_ID, true);
}
private AnnotationIntrospector createAnnotationIntrospector() {

View File

@@ -19,6 +19,7 @@ import java.util.List;
import java.util.stream.Collectors;
@Singleton
@Produces(MediaType.APPLICATION_JSON)
public class UserCollectionResource extends AbstractManagerResource<User, UserException> {
private final UserDto2UserMapper dtoToUserMapper;
private final User2UserDtoMapper userToDtoMapper;
@@ -48,7 +49,6 @@ public class UserCollectionResource extends AbstractManagerResource<User, UserEx
@ResponseCode(code = 403, condition = "forbidden, the current user has no admin privileges"),
@ResponseCode(code = 500, condition = "internal server error")
})
@Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
public Response getAll(@Context Request request, @Context UriInfo uriInfo, @DefaultValue("0")
@QueryParam("start") int start, @DefaultValue("-1")
@QueryParam("limit") int limit, @QueryParam("sortby") String sortby,
@@ -69,7 +69,6 @@ public class UserCollectionResource extends AbstractManagerResource<User, UserEx
@ResponseCode(code = 500, condition = "internal server error")
})
@TypeHint(TypeHint.NO_CONTENT.class)
@Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
public Response create(@Context UriInfo uriInfo, UserDto userDto) throws IOException, UserException {
User user = dtoToUserMapper.userDtoToUser(userDto, "");
manager.create(user);

View File

@@ -1,13 +1,15 @@
package sonia.scm.api.v2.resources;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import javax.xml.bind.annotation.XmlElement;
import java.time.Instant;
import java.util.Map;
import java.util.Optional;
@Data
@JsonInclude(JsonInclude.Include.NON_EMPTY)
public class UserDto {
private boolean active;
private boolean admin;
@@ -19,6 +21,6 @@ public class UserDto {
private String password;
private String type;
@XmlElement(name = "_links")
@JsonProperty("_links")
private Map<String, Link> links;
}

View File

@@ -1,6 +1,7 @@
package sonia.scm.api.v2.resources;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import com.webcohesion.enunciate.metadata.rs.ResponseCode;
import com.webcohesion.enunciate.metadata.rs.StatusCodes;
import com.webcohesion.enunciate.metadata.rs.TypeHint;
@@ -15,6 +16,8 @@ import javax.ws.rs.*;
import javax.ws.rs.core.*;
import java.util.Collection;
@Singleton
@Produces(MediaType.APPLICATION_JSON)
public class UserSubResource extends AbstractManagerResource<User, UserException> {
private final UserDto2UserMapper dtoToUserMapper;
private final User2UserDtoMapper userToDtoMapper;
@@ -35,7 +38,6 @@ public class UserSubResource extends AbstractManagerResource<User, UserException
@ResponseCode(code = 404, condition = "not found, no group with the specified id/name available"),
@ResponseCode(code = 500, condition = "internal server error")
})
@Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
public Response get(@Context Request request, @Context UriInfo uriInfo, @PathParam("id") String id)
{
if (SecurityUtils.getSubject().hasRole(Role.ADMIN))
@@ -58,7 +60,6 @@ public class UserSubResource extends AbstractManagerResource<User, UserException
@ResponseCode(code = 500, condition = "internal server error")
})
@TypeHint(TypeHint.NO_CONTENT.class)
@Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
public Response update(@Context UriInfo uriInfo,
@PathParam("id") String name, UserDto userDto)
{