[英]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.