【JAVA+Geoserver】使用Geoserver的REST API发布样式,文本丢失问题,已解决

解决方法直接从目录跳到最后

问题描述

使用geoserver-manager的工具在发布(创建和修改)样式时,发布的文本和传输的sld文本不一致。导致效果会变成下面这样:

image-20230830144646089

image-20230830144622507

原因分析

在geoserver检查sld文本

上面是我传输的文本

image-20230830144745415

下面是实际的效果

image-20230830144802230

经过比对,不仅xml的标签被改动,fill的属性内容也丢失了,发生了严重的bug

推测一、是否是geoserver-manager的API优化sld文本,导致文本内容丢失

第一时间就想到,可能是某种优化器将标签进行了替换和删减。直接拔源码查看

  1. Debug 到下面的位置进行检查

image-20230830145510584

image-20230830145423394

  1. 检查请求体中的数据是否被“篡改”
    • 到这里可以发现我们传入的sld文本被转成二进制了
    • idea支持以文本显示的形式展示,进入查看如下,可以确定的是,文本在发送前就是没有问题的

image-20230830145701620

结论:geoserver-manager并没有优化文本

推测二、API接口本身就有问题

测试方法,使用apifox或者postman去发布样式,配置如下

image-20230830150014572

请求头直接从工具内复制出来就行

image-20230830150429428

测试结果:效果和使用geoserver-manager结果一样,文本都是丢失的

结论:可以确定是geoserver的内部出现问题

解决方法

推荐阅读原文,搜了好久终于找到的关键所在 http://t.csdn.cn/DwY2z

总结原因,就是这个更新样式的接口,在后续的geoserver的版本更新中,新增了一个叫raw的参数,如果传入为false就不会覆盖原文。而恰恰官方给设置的值就是false。

验证:在apifox里添加这个参数raw=true,再请求这个接口

image-20230830150453097

查看效果

image-20230830150530674

问题解决。

在代码中如何解决?

安装原文的方法是要求自定义一个请求。自己在尝试重写的过程中发现了一个很眼熟的参数如下:

image-20230830154550894

不难发现,其实最新版的工具已经加入了该参数,尝试修改一下自己的发布样式方法:

加了以下两个参数

image-20230830154648043

就可以解决问题了

如果没有参数,就把geoserver-manager升级到1.70即可

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Xcong_Zhu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值