Java 如何在Spring boot中避免DTO到域的转换,反之亦然?
在我的项目中,我从UI获取值,传递给控制器和服务层。然后我做了DTO到域的转换,我觉得这是不必要的,不是一个好的设计 e、 g.这是我的JSP:Java 如何在Spring boot中避免DTO到域的转换,反之亦然?,java,spring,spring-boot,controller,dto,Java,Spring,Spring Boot,Controller,Dto,在我的项目中,我从UI获取值,传递给控制器和服务层。然后我做了DTO到域的转换,我觉得这是不必要的,不是一个好的设计 e、 g.这是我的JSP: <form:form id="parcelCondemnationCaseDetailsForm" modelAttribute="parcelCondemnationCaseDetailsDTO"> <form:hidden path="prclSeqNum" />
<form:form id="parcelCondemnationCaseDetailsForm"
modelAttribute="parcelCondemnationCaseDetailsDTO">
<form:hidden path="prclSeqNum" />
<form:hidden path="condemnationStatusCode" />
<form:hidden id="isMDOTVerifiedMoveDateAvailable"
path="mDOTVerifiedMoveDateAvailable" />
<div class="form-group">
<div class="row">
<div class="col-md-3">
<label for="finalDisposition">Final Disposition</label>
<form:select class="form-control dirty _enableSaveDisable"
id="finalDisposition" path="finalDisposition"
disabled="${agSecurityFinalDisabled}"
onchange="finalDispositionChange()">
<form:option value="" select="select">Select</form:option>
<form:option value="J">Judgement</form:option>
<form:option value="V">Jury Verdict</form:option>
<form:option value="S">Settlement</form:option>
<form:option value="O">Other</form:option>
</form:select>
</div>
<div class="col-md-3" id="finalDispositionDescriptionDiv"
style="display: none;">
<label for="finalDispositionDescription" class="req-label">Final
Disposition Description</label>
<form:input type='text' id="finalDispositionDescription"
class="form-control dirty _enableSaveDisable" aria-required="true"
path="finalDispositionDescription" maxlength="50"
disabled="${agSecurityFinalDisabled}" />
</div>
<div class="col-md-3">
<label for="finalDispositionDate">Final Disposition Date</label>
<form:input type='text' id="finalDispositionDate"
class="form-control lamdaDate dirty _addDate _pastPresent _enableSaveDisable"
path="finalDispositionDate" disabled="${agSecurityFinalDisabled}" />
</div>
<div class="col-md-3">
<label for="closedDate">Closed Date </label>
<form:input type='text' id="closedDate"
class="form-control lamdaDate dirty _addDate _pastPresent _enableSaveDisable"
path="closedDate" disabled="${agSecurityFinalDisabled}" />
</div>
</div></form:form>
以及服务层
public ParcelCondemnationCaseDetailsDTO saveCaseDetails(
ParcelCondemnationCaseDetailsDTO parcelCondemnationCaseDetailsDTO) {
ParcelCondemnation parcelCondemnation = ParcelCondemnationCaseDetailsMapper.INSTANCE
.getCaseDetails(parcelCondemnationCaseDetailsDTO);
parcelCondemnationRepository.save(parcelCondemnation);
在进行DTO到域的转换时,我看不到我在添加任何值。
所以,我的问题是,有没有办法避免使用DTO、映射器和额外的代码行
谢谢查看。因为您的实体正是您的DTO,所以您可以在控制器中直接在实体类中使用
@JsonView
注释,它可以过滤您希望作为响应显示给UI的字段
@PostMapping("/saveCaseDetails.htm")
@JsonView(View.Public.class)
public @ResponseBody String saveCaseDetail
...
@Entity
public ParcelCondemnation {
@JsonView(View.Public.class)
private String anyFieldtoShow;
private String anyFieldToNotShow;
...
public class Views {
public static class Public {}
}
在这种情况下,您的响应将仅显示anyFieldToShow
,作为对该enpoint的任何请求的回答,并用相关的JsonView
注释
这里有一个更好的解释:
我知道你可以使用GraphQL,不幸的是,我没有足够的知识来谈论它,但如果你想深入讨论,这里会有以下链接:谢谢你的评论,但是,如何处理我将有一个日期的情况是UI和以货币格式表示的金额?用户界面可能会以字符串形式发送日期,并再次以字符串形式发送当前日期。欢迎使用。我不太明白你的意思,你能用更多的细节更新你的问题吗,或者再创建一个?
@PostMapping("/saveCaseDetails.htm")
@JsonView(View.Public.class)
public @ResponseBody String saveCaseDetail
...
@Entity
public ParcelCondemnation {
@JsonView(View.Public.class)
private String anyFieldtoShow;
private String anyFieldToNotShow;
...
public class Views {
public static class Public {}
}