如何从AJAX请求中读取RestWebservice中的JSON数据

时间:2016-02-24 05:52:15

标签: java json ajax rest

我正在尝试使用AJAX调用从HTML页面发送一个JSON字符串到RESTWebservice。调用服务器中的方法但是我无法通过AJAX调用检索我在浏览器中设置的JSON数据。我对REST服务很有帮助。

这是我的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>

1 个答案:

答案 0 :(得分:0)

因此POST请求的正文将是

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

编写一个Java类,这个JSON可以是mappend。

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());
}