src/User/Controller/UserController.php
public function passwordRecoveredAction() 
    {
		$this->getResponse()
			->setStatusCode(Response::STATUS_CODE_201);
		$userService = $this->getServiceLocator()->get('user.service.user');
		$id = $this->params()->fromRoute('id');
		
		try {
			$userService->passwordRecovered($id);
			$returnData = array(
				'status' => 'success',
				'message' => 'Ti abbiamo inviato un\'email con la nuova password per il tuo account. Se vorrai potrai modificarla una volta connesso.'
			);
    	} catch(\Exception $e) {
    		$this->getResponse()
    			->setStatusCode(Response::STATUS_CODE_500);
			$returnData = @unserialize($e->getMessage());
			
			if(!is_array($returnData)) {
				$returnData = array(
					'status' => 'danger',
					'message' => $e->getMessage()
				);
			}
    	}
    	
		return  new JsonModel($returnData);
    }
public function passwordRecoveredAction() 
    {
		$this->getResponse()
			->setStatusCode(Response::STATUS_CODE_201);
		$userService = $this->getServiceLocator()->get('user.service.user');
		$id = $this->params()->fromRoute('id');
		
		try {
			$userService->passwordRecovered($id);
			$returnData = array(
				'status' => 'success',
				'message' => 'Ti abbiamo inviato un\'email con la nuova password per il tuo account. Se vorrai potrai modificarla una volta connesso.'
			);
    	} catch(\Exception $e) {
    		$this->getResponse()
    			->setStatusCode(Response::STATUS_CODE_500);
			$returnData = @unserialize($e->getMessage());
			
			if(!is_array($returnData)) {
				$returnData = array(
					'status' => 'danger',
					'message' => $e->getMessage()
				);
			}
    	}
    	
		return  new JsonModel($returnData);
    }
When user receive password recovery email
and click on the link, he will arrive here

@return \Zend\View\Model\JsonModel