实用主义似乎与我在Seaside的预期不同

时间:2017-07-27 19:19:28

标签: smalltalk pharo seaside

Pharo / Seaside相当新,自从我使用Smalltalk以来已经有很长一段时间了。我正在尝试创建RESTful服务,并且无法按照我认为应该的方式使用pragma。即,这是TeamMembers类中的list方法,它是WARestfulHandler的直接子类。

list
   <get>

^ String streamContents: [ :stream |
    self teamMembers do: [ :each |
       stream nextPutAll: each ; crlf ] ]

完成所有正确的注册后     WAAdmin注册:TeamMembers at:'team-members' 当我在浏览器中执行(http://localhost:8080/team-members)时,我收到了消息

/未找到团队成员
但如果我执行(http://localhost:8080/team-members/list),它会按预期工作。

这似乎与http://book.seaside.st/book/advanced/restful/getting-started/define-handler中的文档相矛盾。

如果我覆盖TeamMembers&gt;&gt;

createRoutes
    | route |
    route := WARoute get: '/listJson' selector: #listJson.
    ^OrderedCollection new
        "GET"
        add: route; 
        add: (WARoute get: #list); 
        yourself

然后,当我浏览到(http://localhost:8080/team-members

时,我得到了预期的行为

但是,要获得Json输出,我仍然必须使用(http://localhost:8080/team-members/listJson)。

我可能错过了一些非常简单的事情,但感谢任何帮助。

在Seaside使用Pharo6.0-64.image,这就是海边的安装方式。

Metacello new
  configuration:'Seaside3';
  repository: 
 'http://www.smalltalkhub.com/mc/Seaside/MetacelloConfigurations/main';
  version: #stable;
  load.


Gofer new
  squeaksource: 'Seaside30Addons';
  package: 'Seaside-REST-Core';
  package: 'Seaside-Pharo-REST-Core';
  package: 'Seaside-Tests-REST-Core';
  load.

由于

2 个答案:

答案 0 :(得分:2)

似乎在list方法中添加另一个pragma已经解决了这个问题。

list
   <get>
   <path: '/'>

   ^ String streamContents: [ :stream |
        self teamMembers do: [ :each |
           stream nextPutAll: each ; crlf ] ]

答案 1 :(得分:2)

您需要添加<path: '/'> pragma,因为您有多个带有<get> pragma且没有参数的方法。