/**
  * @param \Symfony\Component\HttpFoundation\Request $request
  * @param \Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter $configuration
  * @return bool
  * @throws \Exception
  */
 public function apply(Request $request, ParamConverter $configuration)
 {
     $class = $configuration->getClass();
     $options = $this->getOptions($configuration);
     switch ($request->getMethod()) {
         case 'GET':
             $data = $this->buildModelFromGetRequest($request, $configuration, $options);
             break;
         case 'PATCH':
             $data = $this->buildModelFromPatchRequest($request, $configuration, $options);
             break;
         case 'POST':
             $data = $this->buildModelFromPostRequest($request, $configuration, $options);
             break;
         case 'DELETE':
             $data = $this->buildModelFromDeleteRequest($request, $configuration, $options);
             break;
         default:
             $data = $request->getContent();
     }
     $object = null;
     if ((!empty($data) || false === $configuration->isOptional()) && $request->headers->get('Content-Type') != 'application/octet-stream') {
         $object = $this->serializer->deserialize($data, $class, $options['format']);
     }
     if (null === $object && false === $configuration->isOptional()) {
         throw new NotFoundHttpException(sprintf('%s object not found.', $class));
     }
     if (null !== $object) {
         if ($this->filterer) {
             $this->filterer->apply($object);
         }
         $constraintViolations = $this->validator->validate($object);
         if ($constraintViolations->count()) {
             throw new ConstraintViolationException($constraintViolations);
         }
     }
     $request->attributes->set($configuration->getName(), $object);
     return true;
 }