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);
}
Aggregations