【问题标题】:Respond to a Restful call响应 Restful 呼叫
【发布时间】:2017-08-30 13:52:01
【问题描述】:

我正在从我的 grails 代码中安静地调用 servlet doGet() 方法。doGet() 方法被成功调用,我能够看到打印语句。调用 doGet() 后,我需要将响应发送回已调用该方法的 restful 调用。如何在 servlet 中设置响应,以便可以将其发送回 grails

    def getStatus(String tableName) {
            try {
                def result
                def resultList = []
                println "attempting to send START signal to http://localhost:9081/ServletSample/ServletSample"
                result = rest.get("http://localhost:9081/ServletSample/ServletSample?tableName="+tableName)
                println "length "+result.length()
                println result.body
                resultList.add(result)
                log.debug "$result.body"
                resultList.each {
                    println "$it.body"
                    if (it.status == 200) {
                        if (it.body == "Starting")

 {
                        println ("starting up")

在 servlet 中我试图将响应设置为

response.setContentLength(5);
        response.setStatus(200);

但没有收到。我收到以下异常

Exception occured in rest service() groovy.lang.MissingMethodException: No signature of method: grails.plugins.rest.client.RestResponse.length() is applicable for argument types: () values: []
Possible solutions: getAt(java.lang.String), each(groovy.lang.Closure), with(groovy.lang.Closure), wait(), getXml(), every() from class java.net.URL

【问题讨论】:

    标签: java rest servlets grails


    【解决方案1】:

    需要将java对象转换成json字符串写入HttpServletResponse。这是代码:

    response.setContentType("application/json");
    response.setCharacterEncoding("UTF-8"); 
    // Get the printwriter object from response to write the required json object to the output stream      
    PrintWriter out = response.getWriter();
    String json = new Gson().toJson(someObject);
    
    out.write(json);
    

    为了将 java 对象转换为 json 字符串,我使用了Google Gson

    但是如果方便的话你可以手动创建json字符串

    【讨论】:

    • someObject 中应该给出什么值。如果状态为 200 并且 body 的值为“starting”,我的 grils 代码正在查找
    • Json 格式的字符串,例如 { "name":"John", "age":31, "city":"New York" }。这将是服务器对 restful 调用的响应。
    • 我明白你在说什么,但我的问题是如何解析并获取 grails 代码中“name”的值,以便我能够检查返回的值是否相等跨度>