3838import org .json .JSONObject ;
3939import org .json .JSONArray ;
4040
41+ import java .io .UnsupportedEncodingException ;
42+ import java .net .URLDecoder ;
43+ import java .nio .charset .StandardCharsets ;
4144import java .util .ArrayList ;
4245import java .util .HashMap ;
4346import 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