Laravel Validation Error customise format of the Response

Currently accepted answer no longer works so i am giving an updated answer.

In the revelent FormRequest use failedValidation function to throw a custom exception

// add this at the top of your file
use Illuminate\Contracts\Validation\Validator; 
use App\Exceptions\MyValidationException;

protected function failedValidation(Validator $validator) {
    throw new MyValidationException($validator);
}

Create your custom exception in app/Exceptions

<?php

namespace App\Exceptions;

use Exception;
use Illuminate\Contracts\Validation\Validator;

class MyValidationException extends Exception {
    protected $validator;

    protected $code = 422;

    public function __construct(Validator $validator) {
        $this->validator = $validator;
    }

    public function render() {
        // return a json with desired format
        return response()->json([
            "error" => "form validation error",
            "message" => $this->validator->errors()->first()
        ], $this->code);
    }
}

This is the only way I found. If there is a better approach please leave a comment.

This works in laraval5.5, I don't think this will work in laravel5.4 but i am not sure.