robert trudel
robert trudel

Reputation: 5749

Multiple requestparam, rest philosophy and good pratice

I have many crud operation. User must be able to search by many field of the resource. Some have around 10.

I could use RequestParam, but method will have a lot of parameter an habitually it's not a good pratice.

/card?id=2&imso=trx&icco=98x&type=23&scm=988&createat=2017-02-01

Is there another good solution?

Upvotes: 0

Views: 325

Answers (1)

Sabir Khan
Sabir Khan

Reputation: 10142

There are two issues here and depending on what carries what importance to you - you can approach a solution.

Problem # 1 : Long REST URLs at client

Problem # 2 : Controller methods with long & complicated signatures

Solution 1 : You group your @RequestParam into optional & mandatory parameters and then you create a DTO only for optional parameters. Then You can have your controller method signature like controllerMethod(@RequestParam param1 , @RequestParam param2, DTO dto).

Note that, you don't use @RequestBody before DTO.

Values for DTO will be passed in client URL itself like before and Spring MVC automatically converts it into DTO.

This solves complicated controller method signature but not long URL problem while you retain your request type to be GET

It is assumed that usually mandatory parameters are only a few and there is always a long list of optional fields.

Solution 2: You change server side to convert your GET request to a POST and start accepting a @RequestBody DTO. This solves both the problems but your original API changes to POST type.

As far as I know, changing a GET to POST shouldn't be a problem in most cases but vice versa is not true.

Upvotes: 1

Related Questions