liftweb休息服务器POST请求

时间:2013-09-08 06:34:31

标签: scala rest lift

我正在尝试创建一个liftweb休息服务器,接受POST个小内部测试请求,并通过Spring框架RestTemplate#postForObject("http://localhost:9090/api/validate/", request, String.class);调用它。我经历了Simply liftweb's Chapter 11 REST

我的RestController.scala

 13 object RestController extends RestHelper {
 14   val data = LiftRules.loadResourceAsXml("/ValidationReply.xml");

 21  serve {
 22    case "api" :: "validate" :: _ XmlPost xml -> _ => <system>
 26             <id>TEST</id>
 27             <name>PILOT</name>
 28             <version>1</version>
 29             <ip_address>192.168.2.18</ip_address>
 30             <connector>
 31                 <id>UPD</id>
 32             </connector>
 33         </system>

124    case JsonGet("api" :: "validate" :: _, _) => JString("Validated")
125  }
126 }

当我使用postUrl = "http://localhost:9090/api/validate"请求服务器时,我收到未找到错误响应

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
    <body>The Requested URL /api/validate was not found on this server</body>
</html>  

restUrl = "http://localhost:9090/api/validate"时,我会通过回复"Validated"收到第二个api。如何在liftweb中发出POST请求?

1 个答案:

答案 0 :(得分:1)

您所拥有的是寻找XML的POST。作为per the source

  

它通过定义TestPost提取器的特征传递。   请求是POST,在帖子体中有JSON或XML数据   在响应中需要JSON或XML的东西。

我不确定您是在发出请求还是实际发送数据。但是,假设您只是发布帖子请求,我会尝试在正文中发布XML。否则,您可以尝试使用Post代替XmlPost重写规则,例如:

case Post("api" :: "validate" :: Nil, req) => 
          <system>
              <id>TEST</id>
              <name>PILOT</name>
              <version>1</version>
              <ip_address>192.168.2.18</ip_address>
              <connector>
                  <id>UPD</id>
              </connector>
          </system>