controller通过map返回减少dto类的创建

更多精彩关注公众号

avatar

不要把实体类对象直接返给前端 ,首先想到的是创建DTO,但是这样就造成大量的DTO,显得很臃肿,为了减少dto的数量,像一些比较少的参数避免创建不必要的DTO,通过本次优化达到业务的目的
(VO按数据库表创建,DTO用于接收或映射Http请求,在BO层将DTO赋值给各个VO)

本次仅仅是单表查询 传给前端数据 ,当然服务端接受数据也可以 用map接,思想都是一样的具体跟业务有关

适不适合 可以看看 这几个探讨:
使用Map取代VO和DTO是否合理
Java 数据查询,使用 Map 还是实体类封装?
使用JavaBean比Map作为参数在性能,维护性方面更好
我们为什么需要DTO(数据传输对象)
总结 重点就是代码维护性(作者不要写自己, 看谁不顺眼写谁🤣); 性能问题;

“咱们现在的水平还谈不上性能,主要是维护,map的可读性比dto定义的字段差”

也欢迎大家在评论区讨论

原代码: 创建DTO给前端返值

    @PostMapping({"/question/choice"})
    public ResponseEntity findExercises(@RequestBody @NotEmpty(message = "{exercises.id.NotEmpty.message}") List<String> cmd5s) {
        List<ChoiceQuestion> contentMd5s = service.findAllByContentMd5In(cmd5s);
        List<ChoiceRtnDto> repetitions = contentMd5s
                .stream()
                .map(e -> new ChoiceRtnDto(e.getContentMd5(), e.getTitle(), e.getPid()))
                .collect(Collectors.toList());
        return ResponseEntity.status(HttpStatus.ALREADY_REPORTED).body(repetitions);
    }

更改后:


@PostMapping({"/question/choice"})
    public ResponseEntity findExercises(@RequestBody @NotEmpty(message = "{exercises.id.NotEmpty.message}") List<String> md5List) {
        List<Map<String, String>> repetitiveQuestions = new ArrayList<>();
        service.findAllByContentMd5In(md5List).forEach(e -> {
            Map<String, String> map = new HashMap<>();
            map.put("md5", e.getContentMd5());
            map.put("name", e.getTitle());
            map.put("pid", e.getPid());
            repetitiveQuestions.add(map);
        });
        return ResponseEntity.status(HttpStatus.ALREADY_REPORTED).body(repetitiveQuestions);
    }
    
posted @ 2019-11-21 13:32  Coding小马  阅读(990)  评论(2)    收藏  举报