RequestBody 中的 POST 数组作为对象列表到 Spring 控制器



我对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"
}
]

我的弹簧控制器:

@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 Region extends BaseEntity {
String region
int age
}

您可以为区域列表创建包装类 (DTO(,例如:

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

相应地更新控制器:

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

最新更新