弹簧控制器补丁操作,请求正文作为某些 DTO 的列表



我有DTO列表作为spring控制器的请求正文,这是一个补丁操作。 补丁看起来很坚定,

-->我会迭代列表

--> 获取每个 DTO

--> 获取 JPA 的 findOne(id( 方法返回的实体对象

--> 现在我有一个问题,那就是检查字段值是否为空,然后将其设置为实体,否则什么都不做

--> 我不想检查每个字段的空值并将其设置为附加的实体,所以我在这里使用了 ModelMapper。请找到以下代码

ModelMapper modelMapper = new ModelMapper();
modelMapper.getConfiguration().setPropertyCondition(Conditions.isNotNull());
modelMapper.map(someDO, someEntity);  //someEntity is the one returned by findOne
tltMasterRepository.save(someEntity);

--> 空值的问题解决了。在将其设置为附加实体之前,我不必显式检查空值。

--> 但是我现在还有一些要求。对于一些字段,我想在将其设置为附加实体之前执行一些操作并派生一些值。 例如。。 someDo.username & someEntity.userID 我必须获取用户名,调用实用程序方法从用户名获取用户ID,然后将此用户ID值设置为someEntity.userID

同样,我还有一些字段,在将其设置为实体之前,我必须对其进行一些预处理?

我能做到这一点的最好方法是什么?

看看Converter.使用转换,您可以从用户名中提取用户 ID 并将其设置为实体:

ModelMapper modelMapper = new ModelMapper();
modelMapper.getConfiguration().setPropertyCondition(Conditions.isNotNull());    
Converter<String, String> userIdConverter = ctx -> ctx.getSource() == null ? null : Utils.extractUserId(ctx.getSource());
modelMapper.typeMap(SomeDO.class, SomeEntity.class).addMappings(mapper -> mapper.using(userIdConverter).map(SomeDO::getUsername, SomeEntity::setUserId));
modelMapper.map(someDO, someEntity);
tltMasterRepository.save(someEntity);

您可以将java bean验证与DTO类一起使用并使用@Valid @RequestBody,有关更多详细信息,请查看 https://www.baeldung.com/javax-validation

最新更新