簡體   English   中英

Spring 啟動 - 如何編寫 Setter 和 Getter 字段名稱動態方式

[英]Spring boot - How to Write Setter and Getter field Name Dynamic way

我正在從數據庫中獲取最近 6 個月的記錄。 基於當前日期。 當我返回它時,我將它存儲到 JSONArray 中 - 我收到序列化錯誤,因為沒有 Getter 和 setter。 我的數據看起來像這樣 -

[
   {
       "userName": "Sita",
       "userEmail": "sita@gmail.com",
       "January": 3,
       "February": 10,
       "March": 1,
       "April": 3,
       "May": 32,
       "June": 31
   },
   {
       "userName": "Gita",
       "userEmail": "gita@gmail.com",
       "January": 3,
       "February": 10,
       "March": 1,
       "April": 3,
       "May": 32,
       "June": 31
   },
   {
       "userName": "Ram",
       "userEmail": "ram@gmail.com",
       "January": 3,
       "February": 10,
       "March": 1,
       "April": 3,
       "May": 32,
       "June": 31
   }
]

現在的問題是 --> 月份名稱可以動態出現。 如何將它設置到我的 setter Getter Method 中,並從 ServiceImp 調用它 --> controller

我不能這樣-

@Data
@NoArgsConstructor
@AllArgsConstructor

private String userName;
   private String userName;
   private String January;
   private String February;
   private String March;
   private String April;
   private String May;
   private String June;
   private String July;
   private String August;
   private String September;
   private String October;
   private String November;
   private String December;

這不是好方法。 我嘗試了很多方法。 你能幫我如何實現這一點,並寫入 serviceImpl 和 Controller 文件。 我是這個 spring 引導的新手,任何幫助都會得到幫助。

如果我們保持這樣,我怎么map它到serviceImp中的特定月份? 請問可以提供代碼嗎? 我該怎么做 map 呢。 就像如果我得到這樣的 JSONObject -

for (int i = 0; i < filterUser.length(); i++) { 
    JSONObject jsb = (JSONObject) filterUser.get(i); 
    jsb.keySet().forEach(keyStr -> { 
         // Here Key is January, and jsb.get(keyStr) -> January data 
         // How can I set the setter and getter here ? 
    // }); 
    //  filteredTotalFeedbackData.put(i, jsb); 
}

我假設的事情很少,因為根據您的詳細信息,問題有些不清楚。

您有一個數據庫,其中包含您在問題中提到的記錄。

[
   {
       "userName": "Sita",
       "userEmail": "sita@gmail.com",
       "January": 3,
       "February": 10,
       "March": 1,
       "April": 3,
       "May": 32,
       "June": 31
   }
]

Its basically Json Object contained inside Json Array, So, as per Java you will have a Entity class to hold the values and that Entity class will be contained inside a List.

@Entity
@Data
@NoArgsConstructor
@AllArgsConstructor
class Details{
    private String userName;
    private String January;
    private String February;
    private String March;
    private String April;
    private String May;
    private String June;
    private String July;
    private String August;
    private String September;
    private String October;
    private String November;
    private String December;
}

從數據庫中獲取數據后的結果將類似於,

List<Details> result = //database call (Repository call);

現在,這一切都將發生在某個服務 class 中,我們稱該服務 class 為 DetailsS DetailsServiceImpl.java

存儲庫

@Repository
interface DetailsRepository extends JpaRepository<Details,Long>{
    
}

服務

@Service
@RequiredArgsConstructor
class DetailsServiceImpl{
    private final DetailsRepository detailsRepository;
    
    public List<DetailsDto> getLastSixMonthsData(){
        //List<Details> result = //detailsRepository database call;

        //either use Modelmapper to copy the data from entity to DTO
        //BeanUtils can also be used.
        return //Copied ArrayList<DetailsDto>(); which will be populated by ModelMapper or BeanUtils.
    }
}

DTO這個DTO負責將數據渲染到controller ,或者您可以說將可representable的數據發送到controller

@Data
//@JsonInclude(JsonInclude.Include.NON_NULL) can be used if you dont want non-null values in your response.
class DetailsDto{
    private String userName;
    private String January;
    private String February;
    private String March;
    private String April;
    private String May;
    private String June;
    private String July;
    private String August;
    private String September;
    private String October;
    private String November;
    private String December;
}

休息控制器

@RestController
@RequiredArgsConstructor
class DetailsController{
    private final DetailsServiceImpl detailsService;
    public ResponseEntity<List<DetailsDto>> getDetailsLastSixMonths(){
        return new ResponseEntity<List<DetailsDto>>(detailsService.getLastSixMonthsData(), HttpStatus.OK);
    }
}

要遵循的鏈接如何使用 BeanUtils.copyProperties?

Copy one class properties to another class, with set the field to map in java Spring boot

無需使用JSONObject並對每個object操作。 希望能幫助到你。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM