use of com.linkedin.restli.server.annotations.ServiceErrors in project rest.li by linkedin.
the class AlbumEntryResource method update.
/**
* Add the specified photo to the specified album.
* If a matching pair of IDs already exists, this changes the add date.
*/
@Override
@SuccessResponse(statuses = { HttpStatus.S_204_NO_CONTENT })
@ServiceErrors(INVALID_PERMISSIONS)
@ParamError(code = INVALID_ID, parameterNames = { "albumEntryId" })
public UpdateResponse update(CompoundKey key, AlbumEntry entity) {
long photoId = (Long) key.getPart("photoId");
long albumId = (Long) key.getPart("albumId");
// make sure photo and album exist
if (!_photoDb.getData().containsKey(photoId))
throw new RestLiServiceException(HttpStatus.S_400_BAD_REQUEST, "Nonexistent photo ID: " + photoId);
if (!_albumDb.getData().containsKey(albumId))
throw new RestLiServiceException(HttpStatus.S_400_BAD_REQUEST, "Nonexistent album ID: " + albumId);
// disallow changing entity ID
if (entity.hasAlbumId() || entity.hasPhotoId())
throw new RestLiServiceException(HttpStatus.S_400_BAD_REQUEST, "Photo/album ID are not acceptable in request");
// make sure the ID in the entity is consistent with the key in the database
entity.setPhotoId(photoId);
entity.setAlbumId(albumId);
_db.getData().put(key, entity);
return new UpdateResponse(HttpStatus.S_204_NO_CONTENT);
}
use of com.linkedin.restli.server.annotations.ServiceErrors in project rest.li by linkedin.
the class RestLiAnnotationReader method addServiceErrors.
/**
* Reads annotations on a given resource class in order to build service errors, which are then added to
* a given resource model.
*
* @param resourceModel resource model to add service errors to
* @param resourceClass class annotated with service errors
*/
private static void addServiceErrors(final ResourceModel resourceModel, final Class<?> resourceClass) {
final ServiceErrorDef serviceErrorDefAnnotation = resourceClass.getAnnotation(ServiceErrorDef.class);
final ServiceErrors serviceErrorsAnnotation = resourceClass.getAnnotation(ServiceErrors.class);
final List<ServiceError> serviceErrors = buildServiceErrors(serviceErrorDefAnnotation, serviceErrorsAnnotation, null, resourceClass, null);
if (serviceErrors == null) {
return;
}
resourceModel.setServiceErrors(serviceErrors);
}
use of com.linkedin.restli.server.annotations.ServiceErrors in project rest.li by linkedin.
the class RestLiAnnotationReader method addServiceErrors.
/**
* Reads annotations on a given method in order to build service errors, which are then added to
* a given resource method descriptor.
*
* @param resourceMethodDescriptor resource method descriptor to add service errors to
* @param method method annotated with service errors
*/
private static void addServiceErrors(final ResourceMethodDescriptor resourceMethodDescriptor, final Method method) {
final Class<?> resourceClass = method.getDeclaringClass();
final ServiceErrorDef serviceErrorDefAnnotation = resourceClass.getAnnotation(ServiceErrorDef.class);
final ServiceErrors serviceErrorsAnnotation = method.getAnnotation(ServiceErrors.class);
final ParamError[] paramErrorAnnotations = method.getAnnotationsByType(ParamError.class);
final List<ServiceError> serviceErrors = buildServiceErrors(serviceErrorDefAnnotation, serviceErrorsAnnotation, paramErrorAnnotations, resourceClass, method);
if (serviceErrors == null) {
return;
}
// Form a set of parameter names which exist on this method
final Set<String> acceptableParameterNames = resourceMethodDescriptor.getParameters().stream().map(Parameter::getName).collect(Collectors.toSet());
// Validate that all parameter names are valid
for (ServiceError serviceError : serviceErrors) {
if (serviceError instanceof ParametersServiceError) {
final String[] parameterNames = ((ParametersServiceError) serviceError).parameterNames();
if (parameterNames != null) {
for (String parameterName : parameterNames) {
if (!acceptableParameterNames.contains(parameterName)) {
throw new ResourceConfigException(String.format("Nonexistent parameter '%s' specified for method-level service error '%s' in %s (valid parameters: %s)", parameterName, serviceError.code(), buildExceptionLocationString(resourceClass, method), acceptableParameterNames.toString()));
}
}
}
}
}
resourceMethodDescriptor.setServiceErrors(serviceErrors);
}
Aggregations