得到的返回的一个实体列表 ,怎么得到它的字段

我根据歌单id查询歌单列表中歌曲信息,得到了返回出来的实体列表,想要提取出其中的一个字段,为song_id。用了get,但是没有出来。


/**
     * 根据歌单id查询歌单列表中歌曲信息(不是Song实体)
     */
    @ApiOperation("根据歌单id查询歌曲")
    @GetMapping(value = "/detail")
    @ApiImplicitParam(name = "songListId",value = "歌单id")
    public Object detail(HttpServletRequest request){
        String songListId = request.getParameter("songListId");
        List<SongListSingle> listSingles = songListSingleService.listSongOfSongListId(Integer.parseInt(songListId));
        listSingles.get(0);
        return listSingles;
    }

下面是postMan 得到的值

img

下面是数据库的值

img

我就想从其中提取出song_id列表,再去数据库查询song_id另一张表的数据出来

1、你的xml文件中返回值类型不对,sql语句写的应该也不对,如果你想返回song_id的list,那么需要如下操作

注意:我只是根据你的代码,推导出你的文件中的方法接口名称,不一定正确,以你的实际为准,你只需要注意返回值由

list<SongListSingle>  改为 List<Integer>,另外再注意一下xml文件中的SQL语句,主要注意返回值resultType="java.lang.Integer"和select 语句

controller中,

List<SongListSingle> listSingles = songListSingleService.listSongOfSongListId(Integer.parseInt(songListId));
改为
List<Integer> listSingles = songListSingleService.listSongOfSongListId(Integer.parseInt(songListId));

service中

List<SongListSingle> .listSongOfSongListId(Integer songListId );
改为
List<Integer> .listSongOfSongListId(Integer songListId );

serviceImple中也对应修改

mapper.java中

List<SongListSingle> .listSongOfSongListId(@Param("songListId") Integer songListId );
改为
List<Integer> .listSongOfSongListId(@Param("songListId") Integer songListId );

mapper.xml中SQL语句

<select id="listSongOfSongListId"  resultType="java.lang.Integer">

        select song_id from song_list_single where  song_list_id = #{songListId}

    </select>

mybatis配置里看看数据库查询的返回值类型

得到数组中的第一个值并将第一个值返回即可


public class SongTest {
    public static void main(String[] args) {
        //模拟表数据
        SongListSingle songListSingle1 = SongListSingle.builder().id("1").songId("1").songListId("1").build();
        SongListSingle songListSingle2 = SongListSingle.builder().id("2").songId("2").songListId("1").build();
        SongListSingle songListSingle3 = SongListSingle.builder().id("3").songId("3").songListId("1").build();
        //模拟取出List数据
        List<SongListSingle> listSingles = Arrays.asList(songListSingle1,songListSingle2,songListSingle3);
        //遍历List数据,取出想要的字段
        listSingles.forEach((s)->System.out.println("song_id : " + s.getSongId()));
        //你的代码:
        //String songListId = request.getParameter("songListId");
        //List<SongListSingle> listSingles = songListSingleService.listSongOfSongListId(Integer.parseInt(songListId));
        //取出第一个数据要复制给一个对象
        if(!listSingles.isEmpty()){
            SongListSingle songListSingle = listSingles.get(0);
            String songId = songListSingle.getSongId();
            System.out.println("song_id-0: " + songId);
        }
    }
}
@Data
@Builder
public class SongListSingle {

        private String id;
        private String songId;
        private String songListId;
}

把你的返回值写成

return listSingles;

改成
return listSingles.get(0);

如果要拿list中的第一个对象的songId的值,就改成
return listSingles.get(0).getSongId();

根据你图片上的内容,我可以得到你接口返回的是一个对象的list,你想得到list中所有对象的ID,你仿照我这个代码改一下controller中的处理逻辑,接口返回id的list


public void testListGetList() {
    List<SysUser> list = new ArrayList<>();
    SysUser king = new SysUser();
    king.setId("1");
    king.setUserName("King");
    king.setPassword("123");
    SysUser queen = new SysUser();
    queen.setId("2");
    queen.setUserName("queen");
    queen.setPassword("123");
    SysUser jack = new SysUser();
    jack.setId("3");
    jack.setUserName("jack");
    jack.setPassword("123");
    list.add(king);
    list.add(queen);
    list.add(jack);
    List<String> result = list.stream().map(sysUser -> sysUser.getId()).collect(Collectors.toList());
    System.out.println(JSON.toJSONString(result));
}

根据您提供的信息,你不希望更改其他配置的前提下,在控制层使用最少的代码来解决ID抽取功能。一般业务场景中这种情况也是很常见的,获取这个对象列表是当前业务模块必须的,那么抽取IDs则是附加的业务,因此您只是不想增加额外的数据库查询开销,来直接抽取这些IDs。Java8中提供的Stream流可以很好的解决您的问题,如果我的理解是对的,一行代码即可搞定:
list.stream().map(Student::getId)


    private static void test(){
        List<Student> list = new ArrayList<>();
        list.add(new Student(0, "A"));
        list.add(new Student(1, "B"));
        list.add(new Student(2, "C"));
        list.add(new Student(3, "D"));
        List<Integer> ids = list.stream().map(Student::getId).collect(Collectors.toList());
        Object[] objects = list.stream().map(Student::getId).toArray();
        System.out.println(Arrays.toString(objects));
    }