【问题标题】:How to read JSON data in RestWebservice from AJAX request如何从 AJAX 请求中读取 RestWebservice 中的 JSON 数据
【发布时间】:2023-03-30 20:37:01
【问题描述】:

我正在尝试使用 AJAX 调用从 HTML 页面向 RESTWebservice 发送 JSON 字符串。服务器中的方法被调用,但是我无法通过 AJAX 调用检索我在浏览器中设置的 JSON 数据。我为 REST 服务使用 jersy。

这是我的 HTML 代码。

<body>
<script type="text/javascript">

var userConfig = {};
userConfig.user = "arin_12";
userConfig.fullName = "Arindam";
var data = JSON.stringify(userConfig);
alert(data);
var req = new XMLHttpRequest();
req.open('POST', 'http://localhost:8080/LiveHive2/rest/hello', true);
req.setRequestHeader('Content-Type','application/json;charset=UTF-8');
req.onreadystatechange = function () {
    if(req.readyState === 4 && req.status === 200) {
        if(req.responseText) {
          alert('The saving of data is ' + req.responseText);
        }
    }
}
req.send(data);
</script>
index page
</body>

这是我在 RestWebservice 中的 JavaCode。

  @POST
  @Produces(MediaType.APPLICATION_JSON)
  @Consumes(MediaType.APPLICATION_JSON)
  public String sayJSONHello2(UserConfig uc) {

    System.out.println("req" + uc);  
    return "{\"Name\":\"Arindam\"}";
  }

Web.xml 看起来像这样。

<servlet>
    <servlet-name>JerseyRESTService</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
    <init-param>
        <param-name>jersey.config.server.provider.packages</param-name>
        <param-value>com.vogella.jersey.first</param-value>
    </init-param>
    <init-param>
        <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
        <param-value>true</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

【问题讨论】:

    标签: java json ajax rest


    【解决方案1】:

    所以POST 请求的主体将是

    {
        "user": "arin_12",
        "fullName": "Arindam"
    }
    

    编写一个可以映射此 JSON 的 Java 类。

    public class UserConfig {
        private String user;
        private String fullName;
        // Constructor, Getter, Setter, ...
    }
    

    然后 JAX-RS 允许您自动将 JSON 转换为类实例。

    @POST
    @Produces(MediaType.APPLICATION_JSON)
    @Consumes(MediaType.APPLICATION_JSON)
    public String sayJSONHello2(UserConfig userConfig) {
      System.out.println("got UserConfig: " + userConfig);  
      return "{\"Name\":\"Arindam\"}";
    }
    

    也可以让 JAX-RS 处理结果到 JSON 的映射。让我们为响应编写第二个类。

    public class HelloResponse {
        private String name;
        // Constructor, Getter, Setter, ...
    }
    

    更改您的 JAX-RS 方法以返回此类的实例。

    @POST
    @Produces(MediaType.APPLICATION_JSON)
    @Consumes(MediaType.APPLICATION_JSON)
    public HelloResponse sayJSONHello2(UserConfig userConfig) {
      System.out.println("got UserConfig: " + userConfig);  
      return new HelloResponse(userConfig.getName());
    }
    

    【讨论】:

    • 我按照建议尝试了。但没有奏效。现在连 sayJSONHello2 方法都没有被调用。请参阅新代码。还更新了 web.xml。
    • 似乎仍然没有进展,JAX-RS2.0 有一些重大升级。根本找不到任何合适的例子。希望能得到一些技术人员的回答...
    猜你喜欢
    • 2021-08-29
    • 2017-05-03
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    • 2017-10-13
    • 2017-03-12
    • 2013-12-20
    • 1970-01-01
    相关资源
    最近更新 更多