Прагмы, кажется, работают не так, как я ожидаю в Seaside.

Довольно новичок в Pharo/Seaside, и прошло много времени с тех пор, как я использовал Smalltalk. Я пытаюсь создать службу RESTful и не могу заставить ее работать с помощью прагм так, как я думаю. Т.е. вот мой метод списка внутри класса TeamMembers, который является прямым подклассом WARestfulHandler.

list
   <get>

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

После выполнения всей необходимой регистрации WAAdmin регистрирует: TeamMembers по адресу: 'team-members', когда я запускаю в браузере (http://localhost:8080/team-members) Я получил сообщение

/team-members не найден
, но если я выполню (http://localhost:8080/team-members/list), он работает так, как ожидалось.

Кажется, это противоречит документации на http://book.seaside.st/book/advanced/restful/getting-started/define-handler.

Если я переопределю TeamMembers>>

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).

Я, вероятно, пропустил что-то довольно простое, но любая помощь приветствуется.

Использование Pharo6.0-64.image с Seaside, вот как было установлено seaside.

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.

Спасибо


person Hutch    schedule 27.07.2017    source источник


Ответы (2)


Вам нужно добавить прагму <path: '/'>, потому что у вас есть более одного метода с прагмой <get> и без аргументов.

person Esteban A. Maringolo    schedule 30.07.2017

Кажется, что добавление еще одной прагмы к методу списка решило проблему.

list
   <get>
   <path: '/'>

   ^ String streamContents: [ :stream |
        self teamMembers do: [ :each |
           stream nextPutAll: each ; crlf ] ]
person Hutch    schedule 30.07.2017