diff --git a/lib/api/helpers/custom_validators.rb b/lib/api/helpers/custom_validators.rb
index 23b1cd1ad456bb69eea9fe1c4b32ac73d20f7634..e4af75f19719bae87d40f1552d7b7ca28a08d922 100644
--- a/lib/api/helpers/custom_validators.rb
+++ b/lib/api/helpers/custom_validators.rb
@@ -10,8 +10,21 @@ module API
           raise Grape::Exceptions::Validation, params: [@scope.full_name(attr_name)], message: message(:absence)
         end
       end
+
+      class IntegerNoneAny < Grape::Validations::Base
+        def validate_param!(attr_name, params)
+          value = params[attr_name]
+
+          return if value.is_a?(Integer) ||
+              [IssuableFinder::FILTER_NONE, IssuableFinder::FILTER_ANY].include?(value)
+
+          raise Grape::Exceptions::Validation, params: [@scope.full_name(attr_name)],
+                                               message: "should be an integer, 'None' or 'Any'"
+        end
+      end
     end
   end
 end
 
 Grape::Validations.register_validator(:absence, ::API::Helpers::CustomValidators::Absence)
+Grape::Validations.register_validator(:integer_none_any, ::API::Helpers::CustomValidators::IntegerNoneAny)
diff --git a/lib/api/issues.rb b/lib/api/issues.rb
index d863a37238cd73485d1a6615363be2a76c942c0e..405fc30a2ed3f40308c2db74db2bed5519e17067 100644
--- a/lib/api/issues.rb
+++ b/lib/api/issues.rb
@@ -40,10 +40,7 @@ module API
         optional :updated_after, type: DateTime, desc: 'Return issues updated after the specified time'
         optional :updated_before, type: DateTime, desc: 'Return issues updated before the specified time'
         optional :author_id, type: Integer, desc: 'Return issues which are authored by the user with the given ID'
-        optional :assignee_id, types: [Integer, String],
-                               values: -> (v) {
-                                 v.is_a?(Integer) || [IssuableFinder::FILTER_NONE, IssuableFinder::FILTER_ANY].include?(v)
-                               },
+        optional :assignee_id, types: [Integer, String], integer_none_any: true,
                                desc: 'Return issues which are assigned to the user with the given ID'
         optional :scope, type: String, values: %w[created-by-me assigned-to-me created_by_me assigned_to_me all],
                          desc: 'Return issues for the given scope: `created_by_me`, `assigned_to_me` or `all`'
diff --git a/lib/api/merge_requests.rb b/lib/api/merge_requests.rb
index 5f20922810525c333a6c4d1543d6d098e03c8a73..a617efaaa4c9672c88b4090b86f210dc3195dafc 100644
--- a/lib/api/merge_requests.rb
+++ b/lib/api/merge_requests.rb
@@ -89,10 +89,7 @@ module API
         optional :updated_before, type: DateTime, desc: 'Return merge requests updated before the specified time'
         optional :view, type: String, values: %w[simple], desc: 'If simple, returns the `iid`, URL, title, description, and basic state of merge request'
         optional :author_id, type: Integer, desc: 'Return merge requests which are authored by the user with the given ID'
-        optional :assignee_id, types: [Integer, String],
-                               values: -> (v) {
-                                 v.is_a?(Integer) || [IssuableFinder::FILTER_NONE, IssuableFinder::FILTER_ANY].include?(v)
-                               },
+        optional :assignee_id, types: [Integer, String], integer_none_any: true,
                                desc: 'Return merge requests which are assigned to the user with the given ID'
         optional :scope, type: String, values: %w[created-by-me assigned-to-me created_by_me assigned_to_me all],
                          desc: 'Return merge requests for the given scope: `created_by_me`, `assigned_to_me` or `all`'
diff --git a/spec/lib/api/helpers/custom_validators_spec.rb b/spec/lib/api/helpers/custom_validators_spec.rb
new file mode 100644
index 0000000000000000000000000000000000000000..810d05c479c553ce80bb672a5731e8a3bda0e960
--- /dev/null
+++ b/spec/lib/api/helpers/custom_validators_spec.rb
@@ -0,0 +1,62 @@
+require 'spec_helper'
+
+describe API::Helpers::CustomValidators do
+  let(:scope) do
+    Struct.new(:opts) do
+      def full_name(attr_name)
+        attr_name
+      end
+    end
+  end
+
+  describe API::Helpers::CustomValidators::Absence do
+    subject do
+      described_class.new(['test'], {}, false, scope.new)
+    end
+
+    context 'empty param' do
+      it 'does not raise a validation error' do
+        expect_no_validation_error({})
+      end
+    end
+
+    context 'invalid parameters' do
+      it 'should raise a validation error' do
+        expect_validation_error({ 'test' => 'some_value' })
+      end
+    end
+  end
+
+  describe API::Helpers::CustomValidators::IntegerNoneAny do
+    subject do
+      described_class.new(['test'], {}, false, scope.new)
+    end
+
+    context 'valid parameters' do
+      it 'does not raise a validation error' do
+        expect_no_validation_error({ 'test' => 2 })
+        expect_no_validation_error({ 'test' => 100 })
+        expect_no_validation_error({ 'test' => 'None' })
+        expect_no_validation_error({ 'test' => 'Any' })
+      end
+    end
+
+    context 'invalid parameters' do
+      it 'should raise a validation error' do
+        expect_validation_error({ 'test' => 'some_other_string' })
+      end
+    end
+  end
+
+  def expect_no_validation_error(params)
+    expect { validate_test_param!(params) }.not_to raise_error
+  end
+
+  def expect_validation_error(params)
+    expect { validate_test_param!(params) }.to raise_error(Grape::Exceptions::Validation)
+  end
+
+  def validate_test_param!(params)
+    subject.validate_param!('test', params)
+  end
+end