code: @GET
      public Response getContent(@PathParam("spaceID") String spaceID,
                                 @PathParam("contentID") String contentID,
                                 @QueryParam("storeID") String storeID,
                                 @QueryParam("attachment") boolean attachment,
                                 @HeaderParam(RANGE_HEADER) String range) {
          StringBuilder msg = new StringBuilder("getting content(");
          msg.append(spaceID);
          msg.append(", ");
          msg.append(contentID);
          msg.append(", ");
          msg.append(storeID);
          msg.append(", ");
          msg.append(attachment);
          msg.append(", ");
          msg.append(range);
          msg.append(")");
  
          try {
              log.debug(msg.toString());
              return doGetContent(spaceID, contentID, storeID, attachment, range);
  
          } catch (InvalidRequestException e) {
              return responseBad(msg.toString(), e, BAD_REQUEST);
  
          } catch (ResourceNotFoundException e) {
              return responseNotFound(msg.toString(), e, NOT_FOUND);
  
          } catch (ResourceStateException e) {
              return responseBad(msg.toString(), e, CONFLICT);
  
          } catch (ResourceException e) {
              return responseBad(msg.toString(), e, INTERNAL_SERVER_ERROR);
  
          } catch (Exception e) {
              return responseBad(msg.toString(), e, INTERNAL_SERVER_ERROR);
          }
      }
docs: see ContentResource.getContent()
  see ContentResource.getContentProperties()
  
  @return 200 response with content stream as body and content properties as headers