getByQuery(HttpServletRequest req...">

Spring request parameter request error

@RequestMapping("/query")
@ResponseBody
public ResponseEntity<Content> getByQuery(HttpServletRequest request, ContentQuery query) {
    // Handle request.
}

      

This code will function as an http wrapper on the ContentQuery object so that I can request content with http requests from javascript. Spring auto-binding binds query parameters to a ContentQuery object.

The problem is that if someone puts an unknown parameter in the request, the ContentQuery object is instantiated and I don't know how to check if I have unexpected parameters.

Is there a way to handle this?

+3


source to share


1 answer


then write your own validator and run it in your controller - docs.spring.io/ spring / docs / current / spring-framework-reference / .... Then you can return a ResponseEntity with whatever status you want - freakman

Thanks for the tip. Haven't used the Validator interface before, but it looks like a clean solution.

Controller:



@Autowired
private ContentQueryValidator validator;

@RequestMapping("/query")
@ResponseBody
public ResponseEntity<List<Content>> getByQuery(
        HttpServletRequest request, ContentQuery query, BindingResult result) {
    validator.validate(query, result);
    if(result.hasErrors()){
        return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
    }

    // No errors. Fetch content from service using query object.
}

      

And the validator:

@Component
public class ContentQueryValidator implements Validator{
    @Override
    public boolean supports(Class<?> aClass) {
        return ContentQuery.class.equals(aClass);
    }

    @Override
    public void validate(Object obj, Errors errors) {
        ContentQuery query = (ContentQuery) obj;

        List<Integer> contentTemplate = query.getContentTemplate();
        List<Integer> displayTemplate = query.getDisplayTemplate();

        if(contentTemplate == null && displayTemplate == null){
            errors.reject("No query provided");
        }
        // More validation here..
    }
}

      

+1


source







All Articles