You are viewing the documentation for the 2.8.4 release. 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 when calling play.i18n.MessagesApi#preferred(Http.RequestHeader) to determine the language of a request, so this method 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 Result list(Http.Request request) {
  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: HTTP Request Handlers / ActionCreator