Grails Goodness: Enable Accept Header for User Agent Requests
Especially when we use Grails to create a RESTful API we want to enable the request header Accept
, so Grails can do content negotiation based on the value in the header. For example we could use the request header Accept: application/json
to get a JSON response. Grails will look at the boolean
configuration property grails.mime.use.accept.header
to see if the Accept
header must be parsed. The default value is true
so the Accept
header is used. But there is another property which determines if the Accept
header is used: grails.mime.disable.accept.header.userAgents
. The value must contain a list or a regular expression pattern of user agents which are ignored for the Accept
header. The default value is ~/(Gecko(?i)|WebKit(?i)|Presto(?i)|Trident(?i))/
. So for any request from these user agents, mostly our web browser, the Accept
header is ignored.
If we use REST web services test tools from our browser, for example Postman, then any Accept
header we set in the tool is ignored by Grails. We must change the value of the configuration property grails.mime.disable.accept.header.userAgents
to for example an empty list. Then we know for every request send to our Grails application, either from a web browser or command-line tool like curl, the Accept
header is interpreted by Grails.
The following sample shows how we make sure the Accept
header is always used:
// File: grails-app/conf/Config.groovy
...
grails.mime.use.accept.header = true // Default value is true.
grails.mime.disable.accept.header.userAgents = []
...
Written with Grails 2.4.1.