Skip to content

Commit 5b848ac

Browse files
committed
fix(medal): 解决勋章属性URL编码问题
- 添加URL解码功能处理勋章属性 - 在添加勋章时对medalAttr进行URL解码 - 在更新勋章时对medalAttr进行URL解码 - 添加异常处理防止解码失败 - 记录解码失败的日志信息
1 parent 8a3e584 commit 5b848ac

File tree

1 file changed

+26
-2
lines changed

1 file changed

+26
-2
lines changed

src/main/java/org/b3log/symphony/service/MedalService.java

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,9 @@
3838
import org.json.JSONObject;
3939
import org.json.JSONArray;
4040

41+
import java.io.UnsupportedEncodingException;
42+
import java.net.URLDecoder;
43+
import java.nio.charset.StandardCharsets;
4144
import java.util.ArrayList;
4245
import java.util.HashMap;
4346
import java.util.List;
@@ -512,12 +515,22 @@ public String addMedal(final String medalName,
512515
}
513516
String nextMedalId = String.valueOf(maxMedalId + 1);
514517

518+
// 对 medalAttr 进行 URL 解码
519+
String decodedMedalAttr = medalAttr;
520+
if (medalAttr != null && !medalAttr.isEmpty()) {
521+
try {
522+
decodedMedalAttr = URLDecoder.decode(medalAttr, StandardCharsets.UTF_8.name());
523+
} catch (UnsupportedEncodingException e) {
524+
LOGGER.log(Level.WARN, "Failed to decode medalAttr [" + medalAttr + "], using original value", e);
525+
}
526+
}
527+
515528
JSONObject medal = new JSONObject();
516529
medal.put("medal_id", nextMedalId);
517530
medal.put("medal_name", medalName);
518531
medal.put("medal_type", medalType);
519532
medal.put("medal_description", medalDescription);
520-
medal.put("medal_attr", medalAttr);
533+
medal.put("medal_attr", decodedMedalAttr);
521534
String oId = medalRepository.add(medal);
522535
transaction.commit();
523536
return oId;
@@ -597,6 +610,17 @@ public void updateMedal(final String medalId,
597610
Query medalQuery = new Query()
598611
.setFilter(new PropertyFilter("medal_id", FilterOperator.EQUAL, medalId));
599612
List<JSONObject> medals = medalRepository.getList(medalQuery);
613+
614+
// 对 medalAttr 进行 URL 解码
615+
String decodedMedalAttr = medalAttr;
616+
if (medalAttr != null && !medalAttr.isEmpty()) {
617+
try {
618+
decodedMedalAttr = URLDecoder.decode(medalAttr, StandardCharsets.UTF_8.name());
619+
} catch (UnsupportedEncodingException e) {
620+
LOGGER.log(Level.WARN, "Failed to decode medalAttr [" + medalAttr + "], using original value", e);
621+
}
622+
}
623+
600624
for (JSONObject medal : medals) {
601625
String oId = medal.optString("oId");
602626
if (oId == null || oId.isEmpty()) {
@@ -605,7 +629,7 @@ public void updateMedal(final String medalId,
605629
medal.put("medal_name", medalName);
606630
medal.put("medal_type", medalType);
607631
medal.put("medal_description", medalDescription);
608-
medal.put("medal_attr", medalAttr);
632+
medal.put("medal_attr", decodedMedalAttr);
609633
Transaction transaction = medalRepository.beginTransaction();
610634
medalRepository.update(oId, medal);
611635
transaction.commit();

0 commit comments

Comments
 (0)