web-services - Grails Rest简单计算器示例

标签 web-services rest grails

我开始学习如何在我的网站上实现Rest WS,但是我发现这有点困难。我的想法是从一个非常简单的示例开始,当我理解了基础知识之后,我将能够理解更复杂的指南。假设我们有一个包含2个文本字段的表单,我们引入2个数字,然后显示这两个数字的乘法。这是完成此任务的代码:

class CalculatorController {

    def index = { }

    def calc = {
        def nr_1 = params.first_nr
        def nr_2 = params.second_nr
        def result
        def erro = 'no'

        if(nr_1.isInteger() && nr_2.isInteger())
        result = nr_1.toInteger() * nr_2.toInteger()
        else
        erro = 'yes'
        chain(action:"print_result", model:[erro: erro, result: result, nr1: nr_1, nr2: nr_2])
    }

    def print_result = {

        if(chainModel.erro.equals('yes'))
        [sms : 'Please introduce only 2 numbers!']
        else
        [sms: 'The result of the multiplication of ' + chainModel.nr1 + ' with ' + chainModel.nr2 + ' is ' + chainModel.result]

    }

}

主 View :
<html>
    <head>
        <title></title>
        <meta name="layout" content="main" />
        <style type="text/css" media="screen">
        </style>
    </head>
    <body>

      This program is a calculator:<br><br>
      <g:form name="myForm" action="calc">
      <h1>Introduce first number: </h1><g:textField name="first_nr" value="${myValue}" /> <br>
      <h1>Introduce second number: </h1><g:textField name="second_nr" value="${myValue}" /> <br>
      <g:submitButton name="update" value="Update" />
      </g:form>
    </body>
</html>

结果 View :
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Sample title</title>
  </head>
  <body>
    <h1>${sms}</h1>
  </body>
</html>

我需要以下帮助:
-处理http和rest请求(Grails会知道正在请求哪个)
-创建一个新类来发送请求(两个数字作为输入,结果作为输出)。

PS。抱歉,如果这太基础了,但是如果我能在网络上找到这样的基本信息,我真的不会问。
提前致谢,
聚丙烯

最佳答案

要将REST请求路由到您的 Controller ,您需要修改UrlMappings.groovy文件,以按照希望发送的语法处理请求。对两个数字的REST请求可能看起来像example.com/multiply/5/6,结果返回30。要让Grails将对它的请求发送到CalculatorController的calc方法,可以在UrlMappings.groovy中添加如下一行:

"/multiply/$first_nr/$second_nr"(controller:"calculator", action:"calc")

或者,如果您想支持其他操作(例如减法,加法等),则希望使用每个方法的名称来创建方法,然后在映射中将$ action代替乘法,如下所示:
"/$action/$first_nr/$second_nr"(controller:"calculator")

甚至将 Controller 移至URL中以实现最终的可扩展性:
"/$controller/$action/$first_nr/$second_nr"{}

这将根据您的要求将请求路由到适当的操作,并为 Controller 方法填充适当的参数。您可能还希望在 Controller 中使用withFormat闭包,以根据请求的内容类型以各种不同的格式(XML,JSON,HTML)发送结果(有关withFormat用法,请参阅grails文档)。

我不确定您对发送请求的类的意思。应用程序可以调用此REST服务,就像调用任何其他REST服务一样。还是您正在寻找这样做的例子?如果是这样,请查看REST client facilities plug-in中的Grails。您也可能会发现blog entry对于使REST Controller 和Grails调用有用。

更新

要使用Groovy访问REST服务,请尝试使用HTTPBuilder的RESTClient扩展(在http://groovy.codehaus.org/modules/http-builder/doc/rest.html处获取),然后可以像这样调用服务:
import groovyx.net.http.RESTClient

def calculator = new RESTClient( 'http://example.com/myapp/' )
def resp = calculator.get( path : 'multiply/5/5' )
assert resp.status == 200
assert resp.data == "The result of the multiplication of 5 with 5 is 25"

您还可以在另一个stackoverflow question上找到有关groovy和REST的更多信息。

关于web-services - Grails Rest简单计算器示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8056441/

相关文章:

ASP.Net Web 服务 - 将详细信息元素添加到适用于 SOAP 1.1 和 SOAP 1.2 的 SOAP 错误响应的正确方法是什么?

spring - Grails、Vaadin 和 Spring 安全插件一起使用

java - java REST项目资源配置错误

java - 使用 JDBCRealm 保护 REST Web 服务?

java - 抛出预期异常后测试响应

php - 方法 POST 的 Wordpress REST API 自定义端点

rest - 休息应用程序中的用户上下文

grails - 是否可以通过Webflow Controller操作访问 View 状态?

java - 在 Elasticsearch 中查询以返回给定短语的所有结果

c# - 如何在Web应用程序而不是C#中的Windows应用程序中创建sqlite文件