From 092f1bade6d23ac9e0923839502d1edfd7369ce1 Mon Sep 17 00:00:00 2001 From: Matija Obreza Date: Thu, 26 Jul 2018 12:15:56 +0200 Subject: [PATCH] Updated JSON serialization - Minimize JSON response, ignore properties, use views --- .../org/genesys2/server/api/v1/AccessionController.java | 6 ++++++ .../org/genesys2/server/model/genesys/AccessionData.java | 2 +- src/main/java/org/genesys2/server/model/impl/Country.java | 4 ++-- src/main/java/org/genesys2/server/model/impl/Crop.java | 4 ++++ .../java/org/genesys2/server/model/impl/FaoInstitute.java | 2 +- 5 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/genesys2/server/api/v1/AccessionController.java b/src/main/java/org/genesys2/server/api/v1/AccessionController.java index f1bd5804f..b8ee86086 100644 --- a/src/main/java/org/genesys2/server/api/v1/AccessionController.java +++ b/src/main/java/org/genesys2/server/api/v1/AccessionController.java @@ -21,6 +21,7 @@ import java.util.UUID; import javax.servlet.http.HttpServletRequest; +import org.genesys.blocks.model.JsonViews; import org.genesys.catalog.api.FilteredPage; import org.genesys.catalog.service.ShortFilterService; import org.genesys2.server.api.ApiBaseController; @@ -42,6 +43,8 @@ import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.servlet.HandlerMapping; +import com.fasterxml.jackson.annotation.JsonView; + import io.swagger.annotations.Api; /** @@ -71,6 +74,7 @@ public class AccessionController { * @return the subset */ @GetMapping(value = "/{UUID:\\w{8}\\-\\w{4}.+}", produces = { MediaType.APPLICATION_JSON_VALUE }) + @JsonView({ JsonViews.Protected.class }) public Accession getByUuid(@PathVariable("UUID") final UUID uuid) { return accessionService.getByUuid(uuid); } @@ -83,6 +87,7 @@ public class AccessionController { * @return the subset */ @RequestMapping(value = "/10.{dummy:[0-9]+}/**", method=RequestMethod.GET, produces = { MediaType.APPLICATION_JSON_VALUE }) + @JsonView({ JsonViews.Protected.class }) public Accession getByDoi(HttpServletRequest request) { final String fullpath = (String) request.getAttribute(HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE); final String doi = fullpath.substring(API_BASE.length()+1); @@ -104,6 +109,7 @@ public class AccessionController { * @throws IOException */ @PostMapping(value = "/list", produces = { MediaType.APPLICATION_JSON_VALUE }) + @JsonView({ JsonViews.Public.class }) public FilteredPage list(@RequestParam(name = "p", required = false, defaultValue = "0") final int page, @RequestParam(name = "l", required = false, defaultValue = "50") final int pageSize, @RequestParam(name = "d", required = false, defaultValue = "ASC") final Sort.Direction direction, diff --git a/src/main/java/org/genesys2/server/model/genesys/AccessionData.java b/src/main/java/org/genesys2/server/model/genesys/AccessionData.java index bfc150f70..fed482708 100644 --- a/src/main/java/org/genesys2/server/model/genesys/AccessionData.java +++ b/src/main/java/org/genesys2/server/model/genesys/AccessionData.java @@ -104,7 +104,7 @@ public abstract class AccessionData extends AuditedVersionedModel implements IdU @ManyToOne(cascade = {}, optional = true) @JoinColumn(name = "orgCtyId", nullable = true) - @JsonView({ JsonViews.Minimal.class }) + @JsonView({ JsonViews.Public.class }) private Country countryOfOrigin; @Column(name = "sampStat", length = 3) diff --git a/src/main/java/org/genesys2/server/model/impl/Country.java b/src/main/java/org/genesys2/server/model/impl/Country.java index 54239ea1d..009c2a86a 100644 --- a/src/main/java/org/genesys2/server/model/impl/Country.java +++ b/src/main/java/org/genesys2/server/model/impl/Country.java @@ -92,7 +92,7 @@ public class Country extends BasicModel { */ @Lob @Type(type = "org.hibernate.type.TextType") - @JsonView({ JsonViews.Public.class }) + @JsonView({ JsonViews.Internal.class }) private String nameL; @Lob @@ -106,7 +106,7 @@ public class Country extends BasicModel { @ManyToOne(cascade = {}, optional = true) @JoinColumn(name = "replacedBy") - @JsonView({ JsonViews.Public.class }) + @JsonView({ JsonViews.Internal.class }) private Country replacedBy; public Country() { diff --git a/src/main/java/org/genesys2/server/model/impl/Crop.java b/src/main/java/org/genesys2/server/model/impl/Crop.java index 7323f206b..8e92de788 100644 --- a/src/main/java/org/genesys2/server/model/impl/Crop.java +++ b/src/main/java/org/genesys2/server/model/impl/Crop.java @@ -40,10 +40,12 @@ import javax.persistence.Transient; import javax.persistence.UniqueConstraint; import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonView; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.commons.lang3.StringUtils; +import org.genesys.blocks.model.JsonViews; import org.genesys.blocks.security.model.AclAwareModel; import org.genesys2.server.model.GlobalVersionedAuditedModel; import org.hibernate.annotations.Type; @@ -70,6 +72,7 @@ public class Crop extends GlobalVersionedAuditedModel implements AclAwareModel { @ElementCollection(fetch = FetchType.LAZY) @CollectionTable(name = "cropname", joinColumns = @JoinColumn(name = "cropId", referencedColumnName = "id"), uniqueConstraints = { @UniqueConstraint(columnNames = "otherName") }) @OrderBy("otherName") + @JsonView({ JsonViews.Public.class }) private List otherNames; @Column(nullable = false, length = 200) @@ -81,6 +84,7 @@ public class Crop extends GlobalVersionedAuditedModel implements AclAwareModel { @Lob @Type(type = "org.hibernate.type.TextType") + @JsonView({ JsonViews.Internal.class }) private String i18n; /** diff --git a/src/main/java/org/genesys2/server/model/impl/FaoInstitute.java b/src/main/java/org/genesys2/server/model/impl/FaoInstitute.java index 2b11e6d7f..731f7d15d 100644 --- a/src/main/java/org/genesys2/server/model/impl/FaoInstitute.java +++ b/src/main/java/org/genesys2/server/model/impl/FaoInstitute.java @@ -84,7 +84,7 @@ public class FaoInstitute extends BasicModel implements GeoReferencedEntity, Acl @ManyToOne(cascade = {}, optional = true) @JoinColumn(name = "countryId") - @JsonView({ JsonViews.Minimal.class }) + @JsonView({ JsonViews.Public.class }) private Country country; @JsonView({ JsonViews.Protected.class }) -- GitLab