/user/5?v=htmlとが同じリソースの 2 つの表現を返す場合/user/5?v=json、それらは同じ URL である必要があります (たとえば/user/5、REST の原則に従って) 。
クライアント側ではAccept、リクエストでヘッダーを使用して、サーバーが送信する表現を示すことができます。
Acceptサーバー側では、ヘッダーの値をテストするために Play 2.1 で次のように記述できます。
public static Result user(Long id) {
User user = User.find.byId(id);
if (user == null) {
return notFound();
}
if (request().accepts("text/html")) {
return ok(views.html.user(user));
} else if (request().accepts("application/json")) {
return ok(Json.toJson(user));
} else {
return badRequest();
}
}
ブラウザーはすべてのタイプに一致するリクエストのヘッダーを設定するため、テスト"text/html"は常に他のコンテンツ タイプの前に記述する必要があることに注意してください。Accept*/*
各アクションに を書きたくない場合はif (request().accepts(…))、次のように因数分解できます。
public static Result user(Long id) {
User user = User.find.byId(id);
return representation(user, views.html.user.ref);
}
public static Result users() {
List<User> users = User.find.all();
return representation(users, views.html.users.ref);
}
private <T> Result representation(T resource, Template1<T, Html> html) {
if (resource == null) {
return notFound();
}
if (request().accepts("text/html")) {
return ok(html.apply(resource));
} else if (request().accepts("application/json")) {
return ok(Json.toJson(resource));
} else {
return badRequest();
}
}