第 2 页 - 代码工厂 - IT编程入门网 - 码工厂 - 码农教程旨在为码农们提供免费的IT编程入门教程和编程学习平台,本码农网涵盖php、java、mysql、html、css、javascript、jquery等流行的编程入门教程。

使用JSON.toJSONString时,出现“$ref”怎么办?服务器返回对象显示$ref怎么解决?

现象
代码

Map<Long, Person> map = new HashMap<>();
Person person = new Person();
person.setName("Bruce");
map.put(1L, person);
List<ContainerClass> list = new ArrayList<>();
ContainerClass containerClass = new ContainerClass();
containerClass.setP1(map.get(1L));
containerClass.setP2(map.get(1L));
list.add(containerClass);
String s = JSON.toJSONString(list);
System.out.println(s);

结果

[{"p1":{"name":"Bruce"},"p2":{"$ref":"$[0].p1"}}]

解决
方案一

String s = JSON.toJSONString(list, SerializerFeature.DisableCircularReferenceDetect);

方案二

Person p2 = new Person();
BeanUtils.copyProperties(map.get(1L), p2);
containerClass.setP2(p2);

结果

[{"p1":{"name":"Bruce"},"p2":{"name":"Bruce"}}]

yaml配置对象map

yaml配置如下:

objectConfig:
  object-map:
    1:
      name: "对象一"
      desc: "这是第一个对象"
      url: "https://abc.abc.abc"
    2:
      name: "对象二"
      desc: "这是第二个对象"
      url: "https://abc.abc.abc"

Java配置类代码如下:

@Configuration
@RefreshScope
@ConfigurationProperties(prefix = "objectConfig")
public class ObjectConfig {
  private Map<Integer, ObjectEntity> objectMap;
}

  public static class ObjectEntity{
    private String name;
    private String desc;
    private String url;
  }

Java使用代码如下:

 @Autowired
private ObjectConfig objectConfig;

ObjectConfig.ObjectEntity objectEntity = objectConfig.getObjectMap().get(1);
}

使用IDEA误配置Kotlin后项目报红,cannot resolve plugin org.apache.maven.plugins:<unknow>

今天使用IDEA搭建项目的过程中,总是弹出Kotlin配置的对话框,之前一直使用19版的IDEA,没有这个东西,20版默认加了IDEA插件,让人头大。
在数次弹出配置对话框之后,无意点了“全部项目”,然后就导致所有项目报红,百度无结果,只能自己研究。
先是打开插件,把kotlin插件关掉,然后打开项目设置,把项目下面写着的kotlin删掉。
然后发现有些项目里面的target中存在kotlin关键字,于是把所有的target都删掉了(clean不掉,这个时候clean会报错,不能用)。
还是不行,然后就开始研究pom文件,报错的、能删的都删掉了,刷新一下maven,总算是搞定了。

说起来很简单,自己第一次摸索还是很耗费时间和经历的,希望后面的同学能顺利一点。

【算法】选择排序算法的讲解和代码实践

思路
选择排序,顾名思义,就是每次选出一个最小或最大的数,移动位置,直到整个数组完成排序。
有数组[26, -3, 14, -15, 0, 324, 98, 1, 22]
现对该数组进行排序,使用选择排序算法。
先来屡一下思路和步骤:

选出整个数组最小的数,记录它的下标;
将它和未排序的最左边数组进行交换(交换过就是排序了);
直至整个数组排序完成。
讲解
首先声明出待排序下标、最小值和最小下标。最小值我们使用Integer.MAX_VALUE,来确保数组中肯定有值能够被排序:

@Test
public void sortTest() {
    int[] nums = new int[]{26, -3, 14, -15, 0, 324, 98, 1, 22};
    selectSort(nums);
    System.out.println(Arrays.toString(nums));
}

private void selectSort(int[] nums) {
    if (nums.length < 2) {
        return;
    }
    // 待排序下标,从0开始
    for (int i = 0; i < nums.length; i++) {
        // 初始化最小值和最小下标
        int minVal = Integer.MAX_VALUE;
        int minIndex = -1;
        // 遍历,寻找最小值
        for (int j = i; j < nums.length; j++) {
            // 如果元素小于minVal,则赋值minVal和minIndex
            if (nums[j] < minVal) {
                minVal = nums[j];
                minIndex = j;
            }
        }
        // 如果最小下标不等于-1,与待排序下表交换
        if (minIndex != -1) {
            int temp = nums[i];
            nums[i] = nums[minIndex];
            nums[minIndex] = temp;
        }
    }
}