Alexander1902 opened a new pull request, #17911:
URL: https://github.com/apache/dolphinscheduler/pull/17911

   <!--Thanks very much for contributing to Apache DolphinScheduler, we are 
happy that you want to help us improve DolphinScheduler! -->
   
   ## Purpose of the pull request
   The original HTTP plugin cannot send JSON nested types. For example, the 
HTTP plugin can only send JSON like {"msgtype": "text", "content": "test"}, but 
cannot send JSON like {"msgtype": "text", "text": {"content": "test"}}. 
   
   ## Brief change log
   
   Modify the type of 
org.apache.dolphinscheduler.plugin.alert.http.HttpSender#bodyParams to 
Map<String, Object>
   
   ## Verify this pull request
   *Modify the previous log*
   ```shell
   java.lang.IllegalArgumentException: Parse json: {"msgtype":"text", 
"text":{"content":"测试"}} to type: java.util.Map<java.lang.String, 
java.lang.String> failed
           at 
org.apache.dolphinscheduler.common.utils.JSONUtils.parseObject(JSONUtils.java:295)
           at 
org.apache.dolphinscheduler.common.utils.JSONUtils.toMap(JSONUtils.java:251)
           at 
org.apache.dolphinscheduler.plugin.alert.http.HttpSender.paramsValidator(HttpSender.java:72)
           at 
org.apache.dolphinscheduler.plugin.alert.http.HttpSender.<init>(HttpSender.java:51)
           at 
org.apache.dolphinscheduler.plugin.alert.http.HttpAlertChannel.process(HttpAlertChannel.java:37)
 
           at 
org.apache.dolphinscheduler.alert.service.AbstractEventSender.syncTestSend(AbstractEventSender.java:166)
           at 
org.apache.dolphinscheduler.alert.rpc.AlertOperatorImpl.sendTestAlert(AlertOperatorImpl.java:52)
           at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
           at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
           at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
           at java.lang.reflect.Method.invoke(Method.java:498)
           at 
org.apache.dolphinscheduler.extract.base.server.ServerMethodInvokerImpl.invoke(ServerMethodInvokerImpl.java:47)
           at 
org.apache.dolphinscheduler.extract.base.server.JdkDynamicServerHandler.lambda$processReceived$0(JdkDynamicServerHandler.java:117)
           at 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) 
           at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
           at java.lang.Thread.run(Thread.java:748)
   Caused by: com.fasterxml.jackson.databind.exc.MismatchedInputException: 
Cannot deserialize value of type `java.lang.String` from Object value (token 
`JsonToken.START_OBJECT`)
    at [Source: (String)"{"msgtype":"text", "text":{"content":"测试"}}"; line: 1, 
column: 27] (through reference chain: java.util.LinkedHashMap["text"])
           at 
com.fasterxml.jackson.databind.exc.MismatchedInputException.from(MismatchedInputException.java:59)
           at 
com.fasterxml.jackson.databind.DeserializationContext.reportInputMismatch(DeserializationContext.java:1741)
           at 
com.fasterxml.jackson.databind.DeserializationContext.handleUnexpectedToken(DeserializationContext.java:1515)
           at 
com.fasterxml.jackson.databind.DeserializationContext.handleUnexpectedToken(DeserializationContext.java:1420)
           at 
com.fasterxml.jackson.databind.DeserializationContext.extractScalarFromObject(DeserializationContext.java:932)
           at 
com.fasterxml.jackson.databind.deser.std.StringDeserializer.deserialize(StringDeserializer.java:62)
           at 
com.fasterxml.jackson.databind.deser.std.StringDeserializer.deserialize(StringDeserializer.java:11)
           at 
com.fasterxml.jackson.databind.deser.std.MapDeserializer._readAndBindStringKeyMap(MapDeserializer.java:609)
           at 
com.fasterxml.jackson.databind.deser.std.MapDeserializer.deserialize(MapDeserializer.java:437)
           at 
com.fasterxml.jackson.databind.deser.std.MapDeserializer.deserialize(MapDeserializer.java:32)
           at 
com.fasterxml.jackson.databind.deser.DefaultDeserializationContext.readRootValue(DefaultDeserializationContext.java:323)
           at 
com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4674)
           at 
com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3629)
           at 
com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3612)
           at 
org.apache.dolphinscheduler.common.utils.JSONUtils.parseObject(JSONUtils.java:293)
           ... 15 common frames omitted
   ```
   *Log after modification*
   ```shell
   [INFO] 2026-01-27 19:35:49.761 +0800 
org.apache.dolphinscheduler.plugin.alert.http.HttpSender:[166] - sending http 
alert post request, url: 
https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=ea529f1d-f509-4af5-a83e-76d9d642d6bf,
 header: {Content-Type=application/json}, requestBody: {msgtype=text, 
text={content=测试}}, contentType: application/json,timeout:1200000
   ```
   You can now send Http messages normally
   ## Pull Request Notice
   [Pull Request 
Notice](https://github.com/apache/dolphinscheduler/blob/dev/docs/docs/en/contribute/join/pull-request.md)
   
   If your pull request contains incompatible change, you should also add it to 
`docs/docs/en/guide/upgrade/incompatible.md`
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to