-2

我需要将数据传递HTMLServiceusing JSON(in JS/JQUERY)

在服务中,我有一个服务调用,它接收一个包含另一个对象和另外 2 个字段的对象。

角色对象:

import java.io.Serializable;

public class Role implements Serializable {           
    private long id;
    private String name;    
}

用户对象:

import java.io.Serializable;

public class User implements Serializable {           
    private String userName;
    private String password;    
    private ArrayList<Role> roles;
}

到目前为止,我设法将数据传递JSON给其他服务:(仅包含 2 个参数的数据: id 和 userName )

xmlHttp.open("POST", "http://www.foo.com/serviceFunction2", true);
xmlHttp.send('{"Id": "123", "userName": "test"}');

所以,我的问题是如何填充包含Role对象的User对象使用 ?就像我设法用这条线发送它:JS/JQUERY

xmlHttp.send('{"Id": "123", "userName": "test"}');

谢谢

4

2 回答 2

1

有几种方法可以在 JS 中“嵌套”对象,但为了您的目的,最简单的方法可能是嵌套您的对象和/或数组字面量。如果“角色”应该是一个数组,那么像这样:

'{"userName":"test", "password":"secret", "roles":["role1","role2","role3"]}'

如果数组中的每个角色本身都是具有属性的对象:

{
   "userName":"test",
   "password":"secret",
   "roles": [
       { "roleName":"role1", "prop2":"someValue", "prop3":"whatever" },
       { "roleName":"role2", "prop2":"someValue", "prop3":"whatever" },
       { "roleName":"role3", "prop2":"someValue", "prop3":"whatever" }
   ]
}

(为了便于阅读,添加了换行符,但如果创建字符串,您会删除它们。)

于 2012-06-06T21:17:35.207 回答
0

我不知道您的目标是什么,但如果您使用 HTML 页面作为 GUI 和 Java 进行处理,您不妨使用或类似的东西。有多个框架,例如可以为您处理很多事情。

如果您有兴趣,请查看Primefaces 展示。

正如 MattBall 建议的那样,您也可以使用类的东西,这可以减轻您的负担。

你可以使用很多强大而简单的东西。

您可以使用注释将对象映射到 JSON/XML:

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Role
{
    @XmlAttribute
    private long id;
    @XmlAttribute
    private String name;    
}

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class User
{
    @XmlAttribute
    private String userName;
    @XmlAttribute
    private String password;
    @XmlElement    
    private ArrayList<Role> roles;
}

然后,您可以在 Web 服务中使用它:

@GET
@Produces(MediaType.APPLICATION_JSON)
@Path("user/{username}")
public User getUser( @PathParam("username") String userName)
{
    User user;
    // Get your user
    return user;
}
于 2012-06-06T21:54:06.087 回答