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 字符串调用 post 调用,例如: {"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

其实很简单,下面是新代码:

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 回答
0

Consumes 注释用于过滤相应方法可接受的内容,因此它会过滤掉 HTTP 标头中没有 Content-Type: application/json 的请求。

您需要在请求中添加Header

Content-Type: application/json
于 2013-01-11T14:59:35.177 回答