Spring MVC - how to return 404 on missing parameters

java, spring-mvc

Solution

If you're using Spring 3.1 you can define an exception class like so:

@ResponseStatus(value = HttpStatus.NOT_FOUND)
public final class ResourceNotFoundException extends RuntimeException {
   //  class definition
}

Now whenever you throw that exception, Spring will return the http status defined in your `@ResponseStatus` annotation. For example:

@RequestMapping(value = "/op")
public void methodWithRequestParams(@RequestParam(value = "param1", required = false) String param1, 
        @RequestParam(value = "param2", required = false) String param2) {
  if (param1 == null || param2 == null) {
    throw new ResourceNotFoundException();
  }
}

will return a `404` whenever `param1` or `param2` is null.

Problem

I want to trigger 404 page whenever I wasn't passed all of the parameters. Lets say I have the following URI: ``` /myapp/op?param1=1&param2=2@param3=3 ``` In case on of the parameters wasn;t invoked I want to return 404 page. I tried doing: ``` @ResponseStatus(HttpStatus.NOT_FOUND) @RequestMapping(value = "op", params = { "!param1" }) public void missingArg() { } ``` but then I get an exception telling me there is ambiguity between methods that handle missing second and third parameter. How can I accomplish this, then?

Original source