Grails Rest XML渲染

时间:2011-11-09 22:20:28

标签: xml parsing rest grails groovy

想象一下,我的控制器中有这个场景:

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'

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

这将返回到我的gsp视图,并且已成功完成。现在我想将其转换为REST访问Web服务。我看到这个的方式,我将不得不手动创建这样的标签:

<firstNumber>nr_1</firstNumber>
<secondNumber>nr_1</secondNumber>   
<result>result</result>  

然后返回其余请求。如何实现这一点(通过提供HTML和XML响应,以及XML,仅解析最后的XML标记)。

2 个答案:

答案 0 :(得分:0)

可能 withFormat 在控制器中对你有用吗? giude

答案 1 :(得分:0)

您可以创建一个代表您的请求的对象,并将请求的内容放入其中。

class Multiplication
{
  String nr_1
  String nr_2
  String result
}

它将使您render as XML能够在您的操作中生成XML:

def multiplication = new Multiplication(nr_1: params.first_nr,
                                        nr_2: params.second_nr)
def error = 'no'
  if (multiplication.nr_1.isInteger() && multiplication.nr_2.isInteger())
    multiplication['result'] = multiplication.nr_1.toInteger() * multiplication.nr_2.toInteger()
  else
    error = 'yes'

if (error == 'yes')
{
  [sms: 'Please introduce only 2 numbers!']
}
withFormat {
  html sms: "The result of the multiplication of $multiplication.nr_1 with $multiplication.nr_2 is $multiplication.result"
  xml { render multiplication as XML }
}

不要忘记控制器开头的import grails.converters.*