Grails 3 app中的POST中的标题不会随其余的服务一起发送

时间:2015-11-09 20:03:22

标签: rest tomcat grails grails-3.0

使用Grails 3.0.9,并在gradle.build中使用此代码段获取最新鲜的REST API:

compile 'org.grails:grails-datastore-rest-client:4.0.7.RELEASE', {
    ['commons-codec', 'grails-async', 'grails-core',
     'grails-plugin-converters', 'grails-web', 'groovy'].each {
        exclude module: it
    }
}

我正在尝试发出以下POST请求:

def rest = new RestBuilder(headers:["X-LSS-Env":"devmo"], connectTimeout:10000, readTimeout:20000)
response = rest.post("http://..../..") {
    accept "application/json"
    contentType "application/json"
    json jsonBuilder
}

现在,POST接收器获得json好了,回复好了,但这就是问题:它接收标题为空地图或null

那么,将标题数据传递给POST接收器的正确方法是什么?这是必需的,因为环境密钥X-LSS-Env可以具有不同的值,这指示接收器基于它进行进一步的路由。当然,与GET请求相同。

*更新*

我的POST请求的使用者实际上是一个在Apache Tomcat/8.0.26上运行的Java应用程序。这是服务在另一方面的表现:

private javax.servlet.http.HttpServletRequest hsr;
@POST
@Path("/na")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public Response postSomething(Ggfp ggfp ){
    try {
        Enumeration<String> hnames = hsr.getHeaderNames();
        int i = 0;
        while (hnames.hasMoreElements()) {
            String headerName = hnames.nextElement();

            System.out.println(++i+ " headerName: " + headerName);
            String val = hsr.getHeader(headerName);
            System.out.println("         val: " + val);
        }
        String hval = hsr.getHeader("X-LSS-Env");
        return Response.status(Status.OK).entity("X-LSS-Env is " + hval).build();
    } catch (Exception e) {
    }
}

从Postman工作中调用此服务,标识标题。从Grails应用程序调用它会导致空图 - 就像我没有发送标题!

1 个答案:

答案 0 :(得分:0)

RestBuilder构造函数从不喜欢我使用(或滥用)它的方式。如果超时发生,可以使用tryCatch逻辑实现我的目标。

def makePostWsr(serviceUrl, jsonBuilder) {
  try {
     def rest = new RestBuilder(connectTimeout:connectTimeout, readTimeout:readTimeout)
     def response = rest.post("$wsUrl/$serviceUrl") {
        header 'X-LSS-Env', 'devmo'
        accept "application/json"
        contentType "application/json"
        json jsonBuilder
     }
     response
  } catch (Exception e) {
     println "== problem makePostWsr on $serviceUrl"
     null
  }
}