我对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