我的grails 2.2.4 app需要支持从第三方应用程序通过HTTP接受文件,并在对其进行一些调整后发送文件作为对第三方应用程序的响应。
我想使用InputStream
将第三方应用程序发送的数据转换为文件,然后使用OutputStream
所以我构建了这段代码:
API类
class ApiResponse {
ApiMeta meta
ApiObject apiObj
}
class ApiMeta {
int code
String errorType
List msgs = []
}
class ApiObject {
OutputStream os
}
//对象Marshaller
JSON.registerObjectMarshaller( ApiObject ) { ApiObject obj ->
//How can I send output stream as json?
}
控制器
//controller
def save() {
request.withFormat {
json {
ApiResponse resp
//How can I convert the JSON data in params to a file?
response.status = 201
resp = new ApiResponse(
meta: new ApiMeta(code: 201),
apiObj: new ApiObject(os: transfers))
render resp as JSON
}
multipartForm {
}
}
问题
OutputStream
放入ApiObject
类是否可以,以便将JSON有效负载发送回服务?答案 0 :(得分:0)
我的grails 2.2.4 app需要支持通过HTTP接受InputStream 来自第三方应用程序并发送OutputStream作为响应 回来。
这没有多大意义。第三方应用无法真正向您的应用发送InputStream
,您的应用无法真正发送OutputStream
。第三方应用程序可以在请求正文中向您发送数据,您可以通过从请求中检索InputStream
来读取正文,并且当您将数据放入响应时也会发生同样的事情。在第一次阅读时,我想也许你只是以一种没有意义的方式写字,但是当我看到你的域名时,这表明你可能真的对这是如何运作感到困惑。
class Request {
InputStream instream
OutputStream outstream
static constraints = {
instream nullable: false, blank: false
}
}
你不能这样做。您无法将InputStream
或OutputStream
保留到数据库中。
编辑:
如果您有这样的控制器:
class MyController {
def someAction(Widget w) {
// do whatever you need to do with the Widget
}
}
class Widget {
String name
String category
}
然后使用看起来像这样的JSON正文向该控制器操作发送请求...
{"name":"Robert","category":"Prog Rocker"}
Grails将自动读取请求的正文并执行相应的绑定。您永远不必直接与任何输入流交互以实现这一点。那是你要找的东西吗?