0
@POST
@Path("/sessions")
@Consumes("application/json")
@Produces("application/json")
public Response createSession(JSONObject jsonObject){

    if (jsonObject.get("subjectId").equals("amadmin")){
        jsonObject.put("username", jsonObject.get("subjectId"));
        jsonObject.put("password", jsonObject.get("authInfo"));
    }
    else{
        jsonObject.put("username", jsonObject.get("subjectId"));
        jsonObject.put("password", jsonObject.get("authInfo"));
        jsonObject.put("uri", "realm=" + jsonObject.get("realm"));
    }

    String openAmUrl = String.format("http://%s%s/identity/json/authenticate", 
            openAmIp, openAmWarName);

    URI uri = null;
    try {
        uri = new URI(openAmUrl);
    } 
    catch (URISyntaxException e) {
        LOGGER.error("Exception " + e);
    }
    return Response.seeOther(uri).build();
}

次のようなJSON文字列を使用してpostcallを呼び出そうとしていますが、 {"subjectId":"me", "authInfo":"password"} 常に。を取得していHTTP/1.1 415 Unsupported Media Typeます。私のメソッドがJSONObjectを受信して​​いる場合、投稿内の文字列は自動的にJSONObjectに変換されますが、ヘッダーを次のように使用しているにもかかわらず、415エラーが発生することを理解しています:Content-Type:application / json Accept:application / json

手伝ってもらえますか?

4

2 に答える 2

0

Consumesアノテーションは、それぞれのメソッドで受け入れられるものをフィルタリングするために使用されるため、HTTPヘッダーにContent-Type:application/jsonが含まれていないリクエストを除外します。

リクエストにヘッダーを追加する必要があります

Content-Type: application/json
于 2013-01-11T14:59:35.177 に答える
0

実際には簡単でした。新しいコードは次のとおりです。

POST
@Path("/sessions")
@Consumes("application/json")
public Response createSession(String body){

    JSONObject jsonObject = null;
    try {
        jsonObject = new JSONObject(body);
    } catch (ParseException e) {
        LOGGER.error("This is not a valid JSON " + e);
        return Response.status(400).build();
    }
于 2013-01-15T07:28:40.193 に答える