/src/test/java/com/alibaba/json/bvt/bug/Bug_for_dragoon26.java

https://github.com/flydream/fastjson · Java · 175 lines · 120 code · 55 blank · 0 comment · 1 complexity · aebf44307b862cfd7de8d8874b18914d MD5 · raw file

  1. package com.alibaba.json.bvt.bug;
  2. import java.util.ArrayList;
  3. import java.util.Collection;
  4. import java.util.HashMap;
  5. import java.util.List;
  6. import java.util.Map;
  7. import junit.framework.TestCase;
  8. import com.alibaba.fastjson.JSON;
  9. import com.alibaba.fastjson.annotation.JSONField;
  10. import com.alibaba.fastjson.serializer.SerializerFeature;
  11. public class Bug_for_dragoon26 extends TestCase {
  12. public void test_0() throws Exception {
  13. MonitorConfigMessage message = new MonitorConfigMessage();
  14. MonitorConfig config = new MonitorConfig();
  15. message.setContent(config);
  16. AlarmReceiver receiver1 = new AlarmReceiver(2001L);
  17. AlarmReceiver receiver2 = new AlarmReceiver(2002L);
  18. AlarmReceiver receiver3 = new AlarmReceiver(2003L);
  19. ArrayList<MonitorItem> items = new ArrayList<MonitorItem>();
  20. {
  21. MonitorItem item1 = new MonitorItem();
  22. item1.setId(1001L);
  23. MonitorItemAlarmRule rule = new MonitorItemAlarmRule();
  24. rule.getAlarmReceivers().add(receiver1);
  25. rule.getAlarmReceivers().add(receiver2);
  26. item1.getRules().add(rule);
  27. items.add(item1);
  28. }
  29. {
  30. MonitorItem item = new MonitorItem();
  31. item.setId(1002L);
  32. MonitorItemAlarmRule rule = new MonitorItemAlarmRule();
  33. rule.getAlarmReceivers().add(receiver1);
  34. rule.getAlarmReceivers().add(receiver3);
  35. item.getRules().add(rule);
  36. items.add(item);
  37. }
  38. {
  39. MonitorItem item = new MonitorItem();
  40. item.setId(1003L);
  41. MonitorItemAlarmRule rule = new MonitorItemAlarmRule();
  42. rule.getAlarmReceivers().add(receiver2);
  43. rule.getAlarmReceivers().add(receiver3);
  44. item.getRules().add(rule);
  45. items.add(item);
  46. }
  47. config.setMonitorItems(items);
  48. String text = JSON.toJSONString(message, SerializerFeature.WriteClassName);
  49. System.out.println(JSON.toJSONString(message, SerializerFeature.WriteClassName, SerializerFeature.PrettyFormat));
  50. MonitorConfigMessage message2 = (MonitorConfigMessage) JSON.parse(text);
  51. System.out.println(JSON.toJSONString(message2, SerializerFeature.WriteClassName, SerializerFeature.PrettyFormat));
  52. }
  53. public static class MonitorConfigMessage {
  54. private Object content;
  55. public Object getContent() {
  56. return content;
  57. }
  58. public void setContent(Object content) {
  59. this.content = content;
  60. }
  61. }
  62. public static class MonitorConfig {
  63. private Map<Long, MonitorItem> monitorItems = new HashMap<Long, MonitorItem>();
  64. @JSONField(name = "MonitorItems")
  65. public Collection<MonitorItem> getMonitorItems() {
  66. return monitorItems.values();
  67. }
  68. @JSONField(name = "MonitorItems")
  69. public void setMonitorItems(Collection<MonitorItem> items) {
  70. for (MonitorItem item : items) {
  71. this.monitorItems.put(item.getId(), item);
  72. }
  73. }
  74. }
  75. public static class MonitorItem extends MonitorItemBase<MonitorItemAlarmRule> {
  76. }
  77. public static class MonitorItemBase <K extends AlarmRuleBase> {
  78. private Long id;
  79. private List<K> rules = new ArrayList<K>();
  80. @JSONField(name = "mid")
  81. public Long getId() {
  82. return id;
  83. }
  84. @JSONField(name = "mid")
  85. public void setId(Long id) {
  86. this.id = id;
  87. }
  88. public List<K> getRules() {
  89. return rules;
  90. }
  91. public void setRules(List<K> rules) {
  92. this.rules = rules;
  93. }
  94. }
  95. public static class AlarmRuleBase {
  96. }
  97. public static class MonitorItemAlarmRule extends AlarmRuleBase {
  98. private List<AlarmReceiver> alarmReceivers = new ArrayList<AlarmReceiver>();
  99. public List<AlarmReceiver> getAlarmReceivers() {
  100. return alarmReceivers;
  101. }
  102. public void setAlarmReceivers(List<AlarmReceiver> alarmReceivers) {
  103. this.alarmReceivers = alarmReceivers;
  104. }
  105. }
  106. public static class AlarmReceiver {
  107. private Long id;
  108. public AlarmReceiver(){
  109. }
  110. public AlarmReceiver(Long id){
  111. this.id = id;
  112. }
  113. public Long getId() {
  114. return id;
  115. }
  116. public void setId(Long id) {
  117. this.id = id;
  118. }
  119. }
  120. }