所以,为了尝试创建一个MySQL数据库的RESTful前端,我简要地看了一下phprestql(简单和简单,但只是太简单)现在我试图将其构建到NetBeans' tutorial。我已经完成了基本教程,并且正好使用我的数据库。但是,我正在试图弄清楚如何自定义它。
JSON中的所有结果似乎都是字符串,即使MySQL表中的属性是Big Ints,Ints和Doubles。这些类型似乎也在netbeans源中正确设置。但是,JSON将所有内容都返回为字符串。有什么想法可以解决这个问题? (同样,我只是在上面的教程中工作,尽管是我的数据库。)
我还试图找出如何在URI中实现其他参数,以进一步细化数据库结果。 (http:// localhost / the_db / people_table /?gender_property = male& updated_property = 2011-01-18)...将返回符合这些条件的所有人行。我的部分问题是我甚至不确定这种功能的正确术语,所以它使得查找示例和教程变得有点困难。
这可能与前一项有关,但我也想使用URI“向下钻取”到表/行/属性中以返回单个值(以JSON格式)......( http:// localhost / the_db / people_table / 42 / lastname)...将返回{“Jones”}
问题的一部分是我几乎不知道Python中的Ruby。我非常熟悉Objective-C,PHP和Perl中的东西。但是,使用那些快速简便的Restful MySQL服务的教程似乎并不常见或流行。
[编辑]
在某种程度上,这有助于回答问题#1,我附加了一些java方法,以指示如何设置/检索数值属性...从我可以告诉实际的JSON生成是由某些库自动化。我在这里看不到它:
/** in the MySQL CommitteeObj table, the committeeId is set as follows */
/* `committeeId` bigint(11) NOT NULL auto_increment */
/** in committee.java */
public class committee implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "committeeId")
private BigInteger committeeId;
//.....
}
public committee(BigInteger committeeId) {
this.committeeId = committeeId;
}
@Override
public String toString() {
return "texlege.committee[committeeId=" + committeeId + "]";
}
/** in committeeConverter.java */
@XmlElement
public BigInteger getCommitteeId() {
return (expandLevel > 0) ? entity.getCommitteeId() : null;
}
public void setCommitteeId(BigInteger value) {
entity.setCommitteeId(value);
}
/** in committeeResource.java */
@GET
@Produces({"application/json"})
public committeeConverter get(@QueryParam("expandLevel")
@DefaultValue("1")
int expandLevel) {
return new committeeConverter(getEntity(), uriInfo.getAbsolutePath(), expandLevel);
}
protected committee getEntity() {
try {
return (committee) em.createQuery("SELECT e FROM committee e where e.committeeId = :committeeId").setParameter("committeeId", id).getSingleResult();
} catch (NoResultException ex) {
throw new WebApplicationException(new Throwable("Resource for " + uriInfo.getAbsolutePath() + " does not exist."), 404);
}
}
}
这是特定委员会查询的输出。请注意,committeeId,committeeType和parentId属性明显缺少JSON编号:
{
"@uri":"http://localhost:8080/TexLegeRest/rest/committees/2735/",
"clerk":"Amy Peterson",
"committeeId":"2735",
"committeeName":"Appropriations",
"committeeType":"1",
"parentId":"-1",
"updated":"2011-02-20T00:00:00-06:00",
}
答案 0 :(得分:6)
答案 1 :(得分:3)
JSON中的所有结果似乎都是字符串,即使在MySQL中也是如此 桌子属性是Big Ints,Ints, 和双打。这些类型似乎也是 在netbeans中正确设置 来源也是。但是,JSON返回 一切都像弦乐。任何想法在哪里 解决这个问题? (再一次,我只是 在上面的教程中工作, 虽然我的数据库。)
JSON中的数字将没有引号。对于前{“人”:{“姓名”:“弗雷德”,“年龄”:24}}。因此,JSON解析器应该能够将其作为数字处理。
我也想弄清楚我是怎么做的 可以实现其他参数 URI,进一步细化数据库 结果。 (HTTP://本地主机/ the_db / people_table / gender_property =男性&安培; updated_property = 2011-01-18) ...会返回所有人的行 符合这些标准。我的部分问题 我不确定是否合适 这类功能的术语, 所以这让它变得有点困难 找到它的例子和教程。
这些被称为查询参数。它们非常有用,尤其是当您的请求中有许多可选参数时
这可能与之前有关 item,但我也想使用URI “深入”进入 要返回的表/行/属性 个别值(以JSON格式)...... (HTTP://本地主机/ the_db / people_table / 42 /姓氏) ......会返回{“Jones”}
查询参数可以在这里使用。如果特定参数通过url传递,那么它将被设置或者它将为null。检查每个查询参数的空状态,并根据非空参数构造where子句。这将产生所需的结果。
更新:如果以字符串形式返回数字是您面临的唯一问题,请将以下内容添加到web.xml。这将使pojo支持。这会将数字作为数字返回。
<init-param>
<param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
<param-value>true</param-value>
</init-param>