Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在Spring boot中避免DTO到域的转换,反之亦然?_Java_Spring_Spring Boot_Controller_Dto - Fatal编程技术网

Java 如何在Spring boot中避免DTO到域的转换,反之亦然?

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" />

在我的项目中,我从UI获取值,传递给控制器和服务层。然后我做了DTO到域的转换,我觉得这是不必要的,不是一个好的设计

e、 g.这是我的JSP:

<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 {}
}