【问题标题】:How to Get data from JSON request in struts2struts2如何从JSON请求中获取数据
【发布时间】:2015-05-08 12:25:29
【问题描述】:

我正在尝试从 Apache Struts 2 中的 JSON 请求中获取数据。
我用这个网址测试过:http://date.jsontest.com/.
StrutsJsonClientAction.java 文件中,行

System.out.println(result);

将其打印到控制台:

{ "time": "12:04:12 PM", "milliseconds_since_epoch": 1431086652240, "date": "05-08-2015"}

我想知道如何在result.jsp中显示这个结果

今天发现有resttemplate可以在spring中使用,想知道struts2中有没有可以使用restemplate之类的工具??

我目前的解决方案:StrutsJsonClientAction.java

package com.example.action;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.ServletActionContext;

public class StrutsJsonClientAction extends ActionSupport{

    private static final long serialVersionUID = 1L;

    private final String url="http://date.jsontest.com/";

    public String execute() throws Exception {

        HttpServletRequest request= ServletActionContext.getRequest();

        request.setCharacterEncoding("utf-8");

        URL myUrl = new URL(url);
        //System.out.println(myUrl.toString());
        HttpURLConnection connection = (HttpURLConnection) myUrl.openConnection(); 
        connection.connect();

        BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(),"utf-8")); 
        String result=""; 
        String temp=null;

        while ((temp=reader.readLine())!= null) { 
            result=result+temp;
        } 

        System.out.println(result);

        return SUCCESS;
    }

}

文件struts.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
    <package name="struts2" extends="struts-default">  
        <action name="GoToGetApi" class="com.example.action.StrutsJsonClientAction">  
            <result>/resault.jsp</result>  
        </action>  
    </package>  
</struts>    

【问题讨论】:

标签: java json jsp struts2


【解决方案1】:

你需要做两件事:

1.- 一旦你从 URL(你的结果变量)获得字符串,你需要转换成一个对象,例如,你可以创建一个名为 Response 的 Java Bean,这个对象将如下所示:

public class Response{
    private String time;
    private Long milisenconds;
    private Date date;
    //setters and getters
}

2.-现在您可以使用 jackson-mapper 库将字符串转换为 Response 对象,如下所示:

private Response response;

//don't forget to add your response and the getter to be able to show this value in your jsp, otherwise you can't do it
public Response getResponse(){
    return response;
}
public String execute(){
    //your code to get your String result value.
    ObjectMapper mapper=new ObjectMapper();
    response=mapper.readValue(result,Response.class);//will parse your String "result" into Response object using this library
    return SUCCESS;
}

3.-您还需要在项目中添加一个新库以支持 JSON 响应,您可以找到这个库:struts2-json-plugin

并且在您的包/操作配置中,您将返回一个 json 类型,而不是返回一个页面:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
    <package name="struts2" extends="struts-default">  
        <action name="GoToGetApi" class="com.example.action.StrutsJsonClientAction">  
            <result type="json">
               <param name="root">response</param>
            </result>  
        </action>  
    </package>  
</struts>    

4.- 现在你可以调用这个 url:http://localhost:8080/yourProyect/GoToGetApi.action,你会看到 json 格式的响应。

但是如果你只有一个在你的jsp中“打印”json字符串,你可以在你的action类中添加这个:

private String apiResponse;
//get of apiResponse

public String execute(){
      //your current code here
      System.out.println(result);
      apiResponse=result;
      return SUCCESS;
   }

而在你的jsp中你只需要添加:

<body>
   <!--your current code here-->
   <label>This is my response:</label> ${apiResponse}
   <br/>
   <label>This is my response:</label><s:property value="apiResponse" />
</body>
</html>

【讨论】:

  • 前两个代码sn-ps没用,一团糟……但剩下的答案是对的,+1
【解决方案2】:

你可以使用

1) Java script to parse the JSON 字符串并显示值

2) 像 AngularJSJQuery 这样的 Java 脚本库具有内置支持,可以用最少的代码轻松高效地完成它们。

【讨论】:

    【解决方案3】:

    两件事:

    1) 创建对象的JavaBean。 JavaBean 中的字段名称必须与 JSON 的字段匹配(但如果需要,您可以绕过这个)。

    public class JsonTest{
        private String time;
        private Long milliseconds_since_epoch;
        private Date date;
        //setters and getters
    }
    

    2) 使用 Gson 将 JSON Stirng 编组为对象。

        public static final Gson gson = new GsonBuilder().setPrettyPrinting().create();
    

    然后使用它...

    JsonTest object = gson.fromJson(jsonString, JsonTest.class);
    

    从任何对象中获取 JSON 字符串......

    String json = gson.toJson(someObject);
    

    【讨论】:

      猜你喜欢
      • 2021-08-29
      • 1970-01-01
      • 2020-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多