Search in sources :

Example 1 with PATCH

use of io.swagger.jaxrs.PATCH in project syndesis by syndesisio.

the class Updater method patch.

@PATCH
@Path(value = "/{id}")
@Consumes(MediaType.APPLICATION_JSON)
default void patch(@NotNull @PathParam("id") @ApiParam(required = true) String id, @NotNull JsonNode patchJson) throws IOException {
    Class<T> modelClass = resourceKind().getModelClass();
    final T existing = getDataManager().fetch(modelClass, id);
    if (existing == null) {
        throw new EntityNotFoundException();
    }
    JsonNode document = Json.reader().readTree(Json.writer().writeValueAsString(existing));
    // Attempt to apply the patch...
    final JsonMergePatch patch;
    try {
        patch = JsonMergePatch.fromJson(patchJson);
        document = patch.apply(document);
    } catch (JsonPatchException e) {
        throw new WebApplicationException(e, Response.Status.BAD_REQUEST);
    }
    // Convert the Json back to an entity.
    T obj = Json.reader().forType(modelClass).readValue(Json.writer().writeValueAsBytes(document));
    if (this instanceof Validating) {
        final Validator validator = ((Validating<?>) this).getValidator();
        final Set<ConstraintViolation<T>> violations = validator.validate(obj, AllValidations.class);
        if (!violations.isEmpty()) {
            throw new ConstraintViolationException(violations);
        }
    }
    getDataManager().update(obj);
}
Also used : JsonPatchException(com.github.fge.jsonpatch.JsonPatchException) PUT(javax.ws.rs.PUT) WebApplicationException(javax.ws.rs.WebApplicationException) ConstraintViolation(javax.validation.ConstraintViolation) JsonMergePatch(com.github.fge.jsonpatch.mergepatch.JsonMergePatch) ConstraintViolationException(javax.validation.ConstraintViolationException) JsonNode(com.fasterxml.jackson.databind.JsonNode) EntityNotFoundException(javax.persistence.EntityNotFoundException) Validator(javax.validation.Validator) Path(javax.ws.rs.Path) Consumes(javax.ws.rs.Consumes) PATCH(io.swagger.jaxrs.PATCH)

Aggregations

JsonNode (com.fasterxml.jackson.databind.JsonNode)1 JsonPatchException (com.github.fge.jsonpatch.JsonPatchException)1 JsonMergePatch (com.github.fge.jsonpatch.mergepatch.JsonMergePatch)1 PATCH (io.swagger.jaxrs.PATCH)1 EntityNotFoundException (javax.persistence.EntityNotFoundException)1 ConstraintViolation (javax.validation.ConstraintViolation)1 ConstraintViolationException (javax.validation.ConstraintViolationException)1 Validator (javax.validation.Validator)1 Consumes (javax.ws.rs.Consumes)1 PUT (javax.ws.rs.PUT)1 Path (javax.ws.rs.Path)1 WebApplicationException (javax.ws.rs.WebApplicationException)1