1
1
package cn .jiguang .sdk .codec ;
2
2
3
+ import cn .jiguang .sdk .bean .push .PushSendParam ;
4
+ import cn .jiguang .sdk .bean .push .other .SM2Push ;
5
+ import cn .jiguang .sdk .utils .SM2Util ;
3
6
import com .fasterxml .jackson .databind .ObjectMapper ;
4
7
import com .fasterxml .jackson .datatype .jsr310 .JavaTimeModule ;
5
8
import feign .RequestTemplate ;
6
9
import feign .codec .EncodeException ;
7
10
import feign .codec .Encoder ;
8
11
import feign .form .FormEncoder ;
9
12
import feign .jackson .JacksonEncoder ;
13
+ import lombok .SneakyThrows ;
10
14
11
15
import java .lang .reflect .Type ;
16
+ import java .util .Base64 ;
17
+ import java .util .Collection ;
18
+ import java .util .Map ;
12
19
13
20
public class ApiEncoder implements Encoder {
14
21
@@ -24,18 +31,33 @@ public ApiEncoder() {
24
31
25
32
@ Override
26
33
public void encode (Object object , Type bodyType , RequestTemplate template ) throws EncodeException {
27
- String contentType = template .headers ().get ("Content-Type" ).stream ().findFirst ().orElse (null );
28
- if (contentType == null ) {
29
- return ;
34
+ Map <String , Collection <String >> headers = template .headers ();
35
+ if (headers .containsKey ("X-Encrypt-Type" )) {
36
+ String encryptType = headers .get ("X-Encrypt-Type" ).stream ().findFirst ().orElse ("" );
37
+ if (encryptType .startsWith ("SM2" ) && object instanceof PushSendParam ) {
38
+ SM2Push sm2Push = convertToSM2Push ((PushSendParam ) object );
39
+ jacksonEncoder .encode (sm2Push , SM2Push .class , template );
40
+ return ;
41
+ }
30
42
}
31
- if (contentType . startsWith ( "application/json " )) {
32
- jacksonEncoder . encode ( object , bodyType , template );
33
- return ;
34
- }
35
- if (contentType .startsWith ("multipart/form-data" )) {
36
- formEncoder .encode (object , bodyType , template );
37
- return ;
43
+ if (headers . containsKey ( "Content-Type " )) {
44
+ String contentType = headers . get ( "Content-Type" ). stream (). findFirst (). orElse ( "" );
45
+ if ( contentType . startsWith ( "application/json" )) {
46
+ jacksonEncoder . encode ( object , bodyType , template );
47
+ } else if (contentType .startsWith ("multipart/form-data" )) {
48
+ formEncoder .encode (object , bodyType , template );
49
+ }
38
50
}
39
51
}
40
52
53
+ @ SneakyThrows
54
+ private SM2Push convertToSM2Push (PushSendParam pushSendParam ) {
55
+ ObjectMapper objectMapper = new ObjectMapper ();
56
+ byte [] encrypt = SM2Util .encrypt (objectMapper .writeValueAsString (pushSendParam ));
57
+ SM2Push sm2Push = new SM2Push ();
58
+ sm2Push .setPayload (Base64 .getEncoder ().encodeToString (encrypt ));
59
+ sm2Push .setAudience (pushSendParam .getAudience ());
60
+ return sm2Push ;
61
+ }
62
+
41
63
}
0 commit comments