我想使用java代码添加一个新的存储插件。目前我正在创建一个json文件并将其上传到钻取web ui。但它失败了。这是我的代码
def creatplugin() {
val httpclient = new DefaultHttpClient()
val httpPost = new HttpPost("http://ip:port/storage/hdfs1.json")
val uploadFilePart = new FileBody(new File("D:/plugin.json"))
val reqEntity = new MultipartEntity()
reqEntity.addPart("hdfs1.json", uploadFilePart)
httpPost.setEntity(reqEntity)
httpPost.setHeader("Content-type", "application/json")
val response = httpclient.execute(httpPost)
println(response.getStatusLine().getStatusCode())
}
在这种情况下,响应代码为400,请求不良。
有任何建议,出了什么问题?有没有其他方法使用java代码动态添加插件而不是rest api?
由于
答案 0 :(得分:1)
问题是Jim指出的多部分实体。这是工作代码
def creatplugin() {
val source = scala.io.Source.fromFile("D:/plugin.json").mkString
val httpclient = new DefaultHttpClient()
val httpPost = new HttpPost("http://ip:port/storage/hdfs1.json")
val reqEntity = new StringEntity(source)
httpPost.setEntity(reqEntity)
httpPost.setHeader("content-type", "application/json")
httpPost.setHeader("Accept", "application/json")
val response = httpclient.execute(httpPost)
println(response.getStatusLine().getStatusCode())
}
答案 1 :(得分:0)
我认为它可能是多部分条目。我只是发布json数据作为帖子消息正文的一部分。这是一个有效的curl示例。请使用StringEntity。
curl -X POST -H“授权:基本bWFwcjpyb290NG1hcHI =” - H“内容类型:application / json”-d'{“name”:“nfl”,“config”:{“type”:“file” “ ”已启用“:真实的, ”连接“: ”maprfs:///“, ”工作区“:{ ”意见“:{ ”位置“: ”/mapr/demo.mapr.com/data/views“,”可写的 “:真” defaultInputFormat “:NULL}”,JSON “:{” 位置 “:”/ MAPR / demo.mapr.com /数据/ NFL / JSON “ ”可写“:假 ”defaultInputFormat“:” JSON “},” CSV “:{” 位置 “:”/ MAPR / demo.mapr.com /数据/ NFL / CSV “ ”可写“:假 ”defaultInputFormat“: ”CSV“}, ”标签“:{”位置 “:”/ MAPR / demo.mapr.com /数据/ NFL / TXT “ ”可写“:假 ”defaultInputFormat“: ”TSV“}, ”XML“:{ ”位置“:”/ MAPR /演示。 mapr.com/data/nfl/xml","writable":false,"defaultInputFormat":null}},"formats":{"csv":{"type":"text","extensions":["csv “],” 定界符 “:”, “}”,TSV “:{” 类型 “:” 文本 “ ”扩展“:[ ”TSV“, ”TXT“], ”定界符“: ”\ t“ 的},” json“:{”type“:”json“}}}}'http://maprdemo:8047/storage/nfl.json