我正在尝试使用put方法通过geoserver rest api更新工作区名称。
我得到"无法更改工作区的名称。"错误。
这是我的代码。
lang_key
答案 0 :(得分:1)
这不是允许的操作(如manual中所述)。任何更改工作空间名称的PUT
都会返回403错误。
您所能做的就是创建一个新工作区,复制旧工作区的内容然后将其删除。
答案 1 :(得分:0)
根据geoserver REST API文档(link),您只需放置一个在其正文中具有xml字符串数据的请求即可简单地编辑工作区名称(ws_name)。
在这里,我举了一个例子。由于使用Express作为我的应用服务器,因此我已经使用javascript实现了一个请求,但是可以将其更改为您喜欢的语法。
const options = {
url: 'http://localhost:8080/geoserver/rest/workspaces/{current_ws_sname}',
method: 'PUT',
headers: { 'Content-type': 'text/xml' },
body: '<workspace><name>{new_ws_name}</name></workspace>',
auth: {
user: {geoserver_username},
pass: {geoserver_password}
}
为了基于上述选项变量执行请求,我在Express中使用了请求功能:
request(options, (error, response, body) => {
console.log('response status code:' , response.statusCode)
console.log('response status message: ', response.statusMessage)
const result = {}
if (!error) {
const statusCode = response.statusCode;
const statusMessage = response.statusMessage;
if (statusCode == 200) {
result.err = false
result.msg = `Modified`
} else if (statusCode == 404) {
result.err = true
result.msg = 'Workspace not found!'
} else if (statusCode == 405) {
result.err = true
result.msg = 'Forbidden to change the name of the workspace!'
//because of your username and/or password
} else if (statusCode == 500) {
result.err = true
result.msg = 'Server internal error or duplicate names'
}
} else {
result.err = true,
result.msg = error;
}
res.send(result);
})
不要忘记替换 {current_ws_sname} , {new_ws_sname} , {geoserver_username} , {geoserver_password} 根据您自己的价值观。
上面已经提到了所有可能的情况(即200、404、405、500),并且在geoserver中没有诸如“ 无法更改工作空间的名称。”之类的错误消息。文档!
您会得到什么statusCode和statusMessage?您可以确认您的{new_ws_sname}是否重复吗?