is there a good or proper way to render the output in Play Framework depending on a parameter? Example:
For HTML:
http://localhost:9000/user/get/5?v=HTML // should render HTML template
For JSON:
http://localhost:9000/user/get/5?v=JSON // should render JSON template
I think that a request interceptor could have the ability to achieve this, but I have no clue how to start or where to start :-(
Or perhaps, write a general render method
that reads the parameters and output as requested, but this seems to me like overkill?
I wanted the user to be able to be viewed in the browser as html or as json so the accepts method did not work for me.
I solved it by putting a generic renderMethod in a base class with the following style syntax
Write 2 methods, use 2 routes (as you don't specify I will use Java samples:
routes:
next you can just make a link in other view to display user's data
or something else...
edit #1
you can also use common
if
orcase
to determine final outputIf
/user/5?v=html
and/user/5?v=json
return two representations of the same resource, they should be the same URL, e.g./user/5
, according to the REST principles.On client side, you can use the
Accept
header in your requests to indicate which representation you want the server to send you.On server side, you can write the following with Play 2.1 to test the value of the
Accept
header:Note that the test against
"text/html"
should always be written prior to any other content type because browsers set theAccept
header of their requests to*/*
which matches all types.If you don’t want to write the
if (request().accepts(…))
in each action you can factor it out, e.g. like the following: