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¶m2=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?