我正在嘗試使用 springBoot 和 Spring 資料 JPA 發布報告物件,但是我需要發送沒有一列的報告物件有什么方法可以在不從類模型中report_request洗掉屬性的情況下從模型中發送沒有此屬性的物件report_request?
我在不提供任何值的情況下發送它,但在資料庫中它作為空字串或空字串被接收,但我不需要發送它,因為資料庫將使用當前日期和特定格式自動填充該欄位。
這是我的代碼:
Model:
package com.ssc.test.cb3.model;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import lombok.Data;
/**
* Class that models the entity report request table of the database
* @author ssc
*/
@Entity
@Table(name = "report_request")
@Data
public class ReportRequest {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "seq_id")
private int id;
// Este es el campo en cuestion
@Column(name = "request_date", nullable = true)
private String requestDate;
@Column(name = "request_userid")
private int requestUserId;
@Column(name = "request_email")
private String requestEmail;
@Column(name = "start_date")
private String startDate;
@Column(name = "end_date")
private String endDate;
@Column(name = "report_type")
private int reportType; // 0 === cliente, 1 === proveedor
@Column(name = "contact_id") // Id from the client or provider chosen
private int contactId;
private String rgids;
private int status; // 0 === active, 1 === inactive
@Column(name = "process_start")
private String processStart;
@Column(name = "process_finish")
private String processFinish;
@Column(name = "call_filter") // 0 === Answered calls, 1 === Not answered, 2 === both
private int callQuery;
}
存盤庫:
package com.ssc.test.cb3.repository;
import org.springframework.data.jpa.repository.JpaRepository;
import com.ssc.test.cb3.model.ReportRequest;
import java.util.List;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
/**
* Class that extends to the repository for database management queries with table
report_request
* @author ssc
*/
@Repository
public interface ReportRequestRepository extends JpaRepository<ReportRequest, Integer> {
@Query(
value = "SELECT * FROM report_request WHERE request_userid = :userId",
nativeQuery = true)
List<ReportRequest> findReportsById(@Param("userId") int requestUserId);
}
現在是服務層:
package com.ssc.test.cb3.service;
import com.ssc.test.cb3.repository.ReportRequestRepository;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ssc.test.cb3.model.ReportRequest;
/**
* Class to prepare the services to be dispatched upon request.
* @author ssc
*/
@Service
public class ReportRequestService {
@Autowired
private ReportRequestRepository reportRequestRepository;
/**
* Functionality to create a request containing a report of the chosen type of request
* @param reportRequest receives an objet ReportRequest with the information to
process the specific request
* @return the action of saving the parameter report in the database.
*/
public ReportRequest createReportRequest(ReportRequest reportRequest){
return reportRequestRepository.save(reportRequest);
}
}
控制器:
package com.ssc.test.cb3.controller;
// Quite los imports de aqui por que son muchos, pero todos estan
/**
* Class to handle REST services and APIs for the download Report's class
* @author ssc
*/
@RestController
@RequestMapping("/v1/reportRequest")
@CrossOrigin(origins = "http://localhost:3000")
public class ReportRequestController {
@Autowired
private ReportRequestService reportRequestService;
@PostMapping("/report")
private ReportRequest saveReportRequest(@RequestBody ReportRequest reportRequest){
return reportRequestService.createReportRequest(reportRequest);
}
}
我試圖將可為空的列發送為 true,但它不起作用。如果您對我如何處理此請愿書有任何想法,我將不勝感激您分享您的想法。
uj5u.com熱心網友回復:
我可以看到您在 Controller 中使用物體類ReportRequest來創建 POST api,但這不是最佳實踐。我們不應該直接從控制器公開物體類。最佳實踐是在物體類之上創建 DTO 類并從控制器公開 DTO 類。所以我會建議,首先創建 DTO 類。
現在根據您的要求,您不想在 JSON 中發送requestDate屬性,并且您認為如果requestDate不是 NULL 或 BLANK 則休眠自動將當前日期存盤在資料庫表中。這是不正確的。Hibernate 不會自動存盤日期。您需要撰寫邏輯來存盤當前日期,因為 Java 中每個物件的默認值都是 NULL。
注意 - 在物體類 ReportRequest 中,請將 requestDate 屬性的資料型別從 String 更改為 Date
您可以像這樣在 setter 方法中撰寫邏輯。
public void setRequestDate(Date requestDate){
if(requestDate==null){
this.requestDate=new Date();
}
}
我希望這能解決您的疑問。
uj5u.com熱心網友回復:
這是部分更新。有一些方法可以縫合它。這篇文章對其進行了全面的解釋:
https://www.baeldung.com/spring-data-partial-update
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/523397.html
上一篇:不能讓RestController接受應用程式/八位位元組流
下一篇:使用嵌套回圈作為流
