如何在 JPA 中使用 Null 值从实体转换为 dto
Hwo can I convert from entity to dto with Null value in JPA
这是我的服务class。
public AnswerDetailResponse addAnswerByQuestionId(Long id, WriteAnswerRequest request) {
Post post = request.toEntity();
post.createAnswer(id);
questionRepository.save(post);
return AnswerDetailResponse.fromEntity(post);
}
这是我的 WriteAnswerRequest 的 fromEntity 方法 class
@ApiModel
@Data
@NoArgsConstructor
@JsonInclude(JsonInclude.Include.NON_NULL)
public class AnswerDetailResponse {
private long questionId;
private long answerId;
private String body;
private int score;
...
}
public static AnswerDetailResponse fromEntity(Post entity) {
AnswerDetailResponse response = new AnswerDetailResponse();
response.setQuestionId(entity.getParentId());
response.setAnswerId(entity.getId());
response.setBody(entity.getBody());
response.setScore(entity.getScore());
response.setTags(entity.getTags());
response.setAccepted(BaseUtil.isEqual(entity.getAcceptAnswerId(), entity.getId()));
response.setLink(SysConfig.QUESTION_DEFAULT_URL + entity.getParentId());
response.setCreatedAt(entity.getCreatedAt());
response.setLastEditedAt(entity.getLastEditedAt());
response.setUsed(entity.getIsUsed());
response.setDeleted(entity.getIsDeleted());
return response;
}
现在,我没有从请求中获得 'score' 值。所以,我得到了例外。
没有像mapstruct,modelmapper这样的库...有什么有效的方法可以解决这个问题吗..?
分数可以从请求中得到,也可以不...
仔细看看你的 Dto AnswerDetailResponse
private int score;
int
是一个不能容纳 null
值的基元。
改成
private Integer score;
既然这条线entity.getScore()
有可能产生Null
,那么不管怎么设置score的值,可以这样:
response.setScore(Optional.ofNullable(entity.getScore()).orElse(0));
注意:假设 score
的数据类型是整数,例如
这是我的服务class。
public AnswerDetailResponse addAnswerByQuestionId(Long id, WriteAnswerRequest request) {
Post post = request.toEntity();
post.createAnswer(id);
questionRepository.save(post);
return AnswerDetailResponse.fromEntity(post);
}
这是我的 WriteAnswerRequest 的 fromEntity 方法 class
@ApiModel
@Data
@NoArgsConstructor
@JsonInclude(JsonInclude.Include.NON_NULL)
public class AnswerDetailResponse {
private long questionId;
private long answerId;
private String body;
private int score;
...
}
public static AnswerDetailResponse fromEntity(Post entity) {
AnswerDetailResponse response = new AnswerDetailResponse();
response.setQuestionId(entity.getParentId());
response.setAnswerId(entity.getId());
response.setBody(entity.getBody());
response.setScore(entity.getScore());
response.setTags(entity.getTags());
response.setAccepted(BaseUtil.isEqual(entity.getAcceptAnswerId(), entity.getId()));
response.setLink(SysConfig.QUESTION_DEFAULT_URL + entity.getParentId());
response.setCreatedAt(entity.getCreatedAt());
response.setLastEditedAt(entity.getLastEditedAt());
response.setUsed(entity.getIsUsed());
response.setDeleted(entity.getIsDeleted());
return response;
}
现在,我没有从请求中获得 'score' 值。所以,我得到了例外。 没有像mapstruct,modelmapper这样的库...有什么有效的方法可以解决这个问题吗..?
分数可以从请求中得到,也可以不...
仔细看看你的 Dto AnswerDetailResponse
private int score;
int
是一个不能容纳 null
值的基元。
改成
private Integer score;
既然这条线entity.getScore()
有可能产生Null
,那么不管怎么设置score的值,可以这样:
response.setScore(Optional.ofNullable(entity.getScore()).orElse(0));
注意:假设 score
的数据类型是整数,例如