You are viewing the documentation for the 2.3.x release series. The latest stable release series is 2.8.x.

§Content negotiation

Content negotiation is a mechanism that makes it possible to serve different representation of a same resource (URI). It is useful e.g. for writing Web Services supporting several output formats (XML, JSON, etc.). Server-driven negotiation is essentially performed using the Accept* requests headers. You can find more information on content negotiation in the HTTP specification.


You can get the list of acceptable languages for a request using the play.mvc.Http.RequestHeader#acceptLanguages method that retrieves them from the Accept-Language header and sorts them according to their quality value. Play uses it to set the lang value of request’s HTTP context, so they automatically use the best possible language (if supported by your application, otherwise your application’s default language is used).


Similarly, the play.mvc.Http.RequestHeader#acceptedTypes method gives the list of acceptable result’s MIME types for a request. It retrieves them from the Accept request header and sorts them according to their quality factor.

You can test if a given MIME type is acceptable for the current request using the play.mvc.Http.RequestHeader#accepts method:

public static Result list() {
    List<Item> items = Item.find.all();
    if (request().accepts("text/html")) {
        return ok(views.html.Application.list.render(items));
    } else {
        return ok(Json.toJson(items));

Next: Asynchronous HTTP programming

Found an error in this documentation? The source code for this page can be found here. After reading the documentation guidelines, please feel free to contribute a pull request. Have questions or advice to share? Go to our community forums to start a conversation with the community.