RESTful MySQL /术语/传递参数/返回Ints&双打

时间:2011-03-06 00:14:41

标签: java mysql json rest netbeans

所以,为了尝试创建一个MySQL数据库的RESTful前端,我简要地看了一下phprestql(简单和简单,但只是简单)现在我试图将其构建到NetBeans' tutorial。我已经完成了基本教程,并且正好使用我的数据库。但是,我正在试图弄清楚如何自定义它。

  1. JSON中的所有结果似乎都是字符串,即使MySQL表中的属性是Big Ints,Ints和Doubles。这些类型似乎也在netbeans源中正确设置。但是,JSON将所有内容都返回为字符串。有什么想法可以解决这个问题? (同样,我只是在上面的教程中工作,尽管是我的数据库。)

  2. 我还试图找出如何在URI中实现其他参数,以进一步细化数据库结果。 (http:// localhost / the_db / people_table /?gender_property = male& updated_property = 2011-01-18)...将返回符合这些条件的所有人行。我的部分问题是我甚至不确定这种功能的正确术语,所以它使得查找示例和教程变得有点困难。

  3. 这可能与前一项有关,但我也想使用URI“向下钻取”到表/行/属性中以返回单个值(以JSON格式)......( http:// localhost / the_db / people_table / 42 / lastname)...将返回{“Jones”}

  4. 问题的一部分是我几乎不知道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",
    }
    

2 个答案:

答案 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>