从 servlet 中的服务器响应中检索动态 JSONObject 值

Retrieving dynamic JSONObject value from server response in servlets

本文关键字:动态 JSONObject 检索 服务器 servlet 响应      更新时间:2023-09-26

嗨,我正在从服务器动态获取 servlet 请求的 access_token 值,如下所示: 现在我想在我的 servlet 程序中检索access_taken值。

{
    "access_token":"AQWP_EVkqdc7E0wD09J6msmjnUlvilhP304gUIDzl6KKgNxwnHyz_W9nOxS0IroDJwEfVr3n3O-IC9YKc3bjyuwYRm6qbKRiP3A2AzuDjo8ohZERZFRCMyfjjqqDjNJ5J5ReCQDhkFJam51eiqsOeXDg4U_c9XJzc1dUx7Qxck0p9RNE0",
    "expires_in": 5183999
}

我的代码如下:

public class Demo extends HttpServlet {
private static final long serialVersionUID = 1L;
private static final String PROTECTED_RESOURCE_URL = "http://api.linkedin.com/v1/people/~:(first-name,last-name,email-address)";
/**
 * @see HttpServlet#HttpServlet()
 */
public Demo() {
    super();
    // TODO Auto-generated constructor stub
}
/**
 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
 */
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
{
    PrintWriter out=response.getWriter();
    String authCode = request.getParameter("code");
    request.setAttribute("authCode",authCode);
    out.println(authCode);
    doPost(request,response);
}
/**
 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
 */
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
{
    PrintWriter out=response.getWriter();
    Object url=request.getAttribute("authCode");
    response.sendRedirect("https://www.linkedin.com/uas/oauth2/accessToken?grant_type=authorization_code&code="+url+"&redirect_uri=http://localhost:8080/LinkedinMails/dem&client_id=xxxxxxxxxxxxx&client_secret=xxxxxxxxxxxxxxx");
}

}

谢谢。

    public String doGet(String url) throws Exception {

    URL urlObj = new URL(url);
    HttpURLConnection conn = (HttpURLConnection) urlObj.openConnection();
    conn.setDoOutput(true);
    String line;
    StringBuffer buffer = new StringBuffer();
    BufferedReader reader = new BufferedReader(new InputStreamReader(
            conn.getInputStream()));
    while ((line = reader.readLine()) != null) {
        buffer.append(line);
    }
    reader.close();
    conn.disconnect();
    return buffer.toString();
}

现在你可以从servlet调用此方法,在servlet中获取服务器响应。希望对您有用。

您可以使用 Gson 或 Jackson 库来获取 JSON 响应。使用杰克逊:

new ObjectMapper().readValue(result, LinkedIn.class);

其中结果是包含access_Tokenexpires _in的 JSON

LinkedIn.java

@JsonIgnoreProperties(ignoreUnknown=true)
public class LinkedIn
{
@JsonProperty("access_token")
private String accessToken;
@JsonProperty("expires_in")
private long expiresIn;
// Getters and setters for expiresOn and accessToken
}

在您的 Servlet/Controller 中

LinkedIn l= new ObjectMapper().readValue(result, LinkedIn.class); // Result is your JSON response which has access token and expires from LinkedIn
l.getAccessToken() ; // Returns you access token
l.getExpiresIn() // Returns you the expires time frame

}

使用 JSONObject

 String s="{'n" +
                "    '"access_token'":'"AQWP_EVkqdc7E0wD09J6msmjnUlvilhP304gUIDzl6KKgNxwnHyz_W9nOxS0IroDJwEfVr3n3O-IC9YKc3bjyuwYRm6qbKRiP3A2AzuDjo8ohZERZFRCMyfjjqqDjNJ5J5ReCQDhkFJam51eiqsOeXDg4U_c9XJzc1dUx7Qxck0p9RNE0'",'n" +
                "    '"expires_in'": 5183999'n" +
                "}";  // This contains  your access token JSON
    JSONParser parser = new JSONParser();
    JSONObject o = (JSONObject) parser.parse(s);
    System.out.println("Access Token:   "+o.get("access_token")); //returns your access token
    System.out.println("Expires: "+o.get("expires_in"));

获取访问令牌 JSON:

  • 在你的Demo Servlet中,doPost方法,而不是sendRedirect做一个http Post(使用 Apache Http Client 或 java.net)调用 url。一旦HTTP发布完成,你会得到一个Http响应,这将是应用程序/json内容。因此,获取此字符串内容(包含应用程序/json)。此字符串内容是LinkedIn发送给您的access_token。收到回复后,请执行以下操作:

    JSONParser parser = new JSONParser(); JSONObject o = (JSONObject) parser.parse(responseString); // responseString is the JSON that you got from LinkedIn. System.out.println("Access Token: "+o.get("access_token")); //returns your access token System.out.println("Expires: "+o.get("expires_in"));