当前位置: 首页 > 知识库问答 >
问题:

我如何使用Java记录作为DTO与ModelMapper?

赫连秦迟
2023-03-14
public record UserDto(String firstName,
                      String lastName,
                      String email,
                      String imageUrl) {}

@RestController
public class UserController {

    @Autowired
    private UserRepository userRepository;

    @Autowired
    private ModelMapper modelMapper;


    @GetMapping("/user/me")
    @PreAuthorize("hasRole('USER')")
    public UserDto getCurrentUser(@CurrentUser UserPrincipal userPrincipal) {
        return convertToDto(userRepository.findById(userPrincipal.getId())
                .orElseThrow(() -> new ResourceNotFoundException("User", "id", userPrincipal.getId())));
    }


    private UserDto convertToDto(User user) {
        UserDto userDto = modelMapper.map(user, UserDto.class);
        return userDto;
    }

    private User convertToEntity(UserDto userDto) throws Exception {
        User post = modelMapper.map(userDto, User.class);
        return post;
    }
}

编辑:更新到版本2.3.8没有帮助!

共有1个答案

司空赞
2023-03-14

记录的字段是最终的,因此必须通过构造函数进行设置。很多框架都会作弊,使用各种花招在事实发生后修改最终字段,但这些在记录上是行不通的。如果要实例化一个记录,必须在构造时提供所有字段值。

框架可能需要一点时间来了解记录。“调用一个无参数的构造函数,然后设置字段”的旧模式对记录不起作用。一些框架已经能够处理这一点(例如,“构造函数注入”),而另一些框架还没有。但是,我们预计框架将很快达到这一目标。

正如评论者所说,您应该鼓励您的框架提供商支持他们。这并不难。

 类似资料:
  • 我在测试中有一段代码,使用Hamcrest 2.2检查结果列表是否包含某些属性: 当是一个普通的类时,这个工作非常好。但是在我将它更改为之后,Hamcrest的抱怨没有名为的属性: 是否有其他匹配器可以用来实现与之前相同的匹配?或者其他解决方法可以用来让它与记录一起工作?

  • null ___________________________________________________________________________________________________________________________________________________________________________________________________

  • Java16引入了记录,这有助于在编写携带不可变数据的类时减少样板代码。当我尝试将记录用作bean时,我得到以下错误消息: 如何将记录用作?

  • 我有一个基于Spring boot sleuth的应用程序。一切正常。我现在有这样的日志: 现在,我想将自定义MDC添加到我的日志中,例如合同引用。我想要这样的日志: 我尝试了各种方法,但都没有成功: 使用Spring Sleuth Tracer添加标签; 使用MDC. put(xxx, xxx)将logging.pattern.level=%5p%mdc添加到我的application.prop

  • 我想实现我自己的并使用Mapstruct将记录映射到POJO。我不太明白如何完成这一点。我遵循了这部分文档:https://www.jooq.org/doc/3.13/manual/sql-execution/fetching/pojos-with-recordmapper-provider/ 我的映射器看起来像这样: 问题是,作为我实际上并没有得到,而是我的语言表中的,因此无法将转换为。知道我需