簡體   English   中英

RequestBody 中的 POST 數組到 Spring Controller 作為對象列表

[英]POST array in RequestBody to Spring Controller as List of Objects

我對 Spring 還很陌生,我看過很多關於類似場景的帖子,但我還沒有弄清楚。

我正在嘗試更改項目中的現有(工作)端點,以將Region對象數組從 Angular 前端傳遞到 Spring 后端中的列表或其他集合。 我的大多數嘗試都導致了錯誤: Bad argument(s) for enum JSON parse error: Cannot deserialize instance of java.util.ArrayList<com.cigna.apps.shapeup.domain.Region> out of START_OBJECT token .

這是我的前端 API 調用:

createCampaignReports(apiRoot: HateoasResponse, campaignId: number, regionList: Region[]): Observable<Action> {
    if (hasHref(apiRoot, this.links.reports)) {
      let params: HttpParams = new HttpParams();
      params = params.set('campaignId', campaignId.toString());
      return this.httpClient.post(getHref(apiRoot, this.links.reports), {regionList}, {params: params})

    ...other code...

    }
  }

這是來自我的前端的字符串化示例數組:

[
  {
    "sid": 2,
    "region": "New Zealand"
  },
  {
    "sid": 18,
    "region": "Middle East"
  },
  {
    "sid": 19,
    "region": "Kenya"
  }
]

我的 Spring Controller:

@PostMapping("/reports")
    ResponseEntity<ApiResponse> generateReports(@RequestParam(value = 'campaignId', required = true) Integer campaignId,
                                                @RequestBody (required = false) List<Region> regionList,
                                                HttpServletRequest request,
                                                HttpServletResponse response) {
...other code...

def user = userService.getUser(userId)
def report = portalService.generateReport(user, campaignId, regionList)

...

最后,我在后端的區域 class :

class Region extends BaseEntity {

    String region

    int age
}

您可以為區域列表創建包裝器 class (DTO),例如:

public class RegionsRequest {
    private List<Region> regions;
    // getters/setters

相應地更新您的 controller:

@PostMapping("/reports") 
ResponseEntity<ApiResponse> generateReports(
    @RequestParam(value = 'campaignId', required = true) Integer campaignId, 
    @RequestBody (required = false) RegionsRequest regions, 
    HttpServletRequest request, 
    HttpServletResponse response) { 
    // other code

暫無
暫無

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

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