javascript - 无法从 JS 获取数组到我的 Spring 引导控制器?
问题描述
我在将数据从我的 React 应用程序发送到我的 Spring Boot 控制器时遇到了一点问题,我通过 put 方法发送数据,但是我得到 400,错误,并且在 eclipse 中弹出一个错误,所以我所做的是:
export const changeContratTypes = (idContrat, items, declaration) => {
const endpoint = template(CONTRAT_TYPES_CHANGE);
return instance // just an axios instance
.put(endpoint({ idContrat }), { items, declaration })
.then(values => values)
.catch(err => err.response);
};
我的端点常量是 url,很简单,我发送声明是一个整数和项目是一个对象数组,我的对象结构是:
{
id: 1, // or 2, 3, ....
isSelected: true, // or false
title: "a String here"
}
为了在 Spring Boot 中得到这个,我在我的控制器中创建了这个方法:
@CrossOrigin(origins = "*")
@ApiOperation(value = "${contrat.recuperation}", notes = "${contrat.recuperation.notes}", response = ContratDetailDto.class)
@PutMapping(value="/{idContrat}/trtype")
@ApiModelProperty(example = "4000004")
@ApiResponses(value = {
@ApiResponse(code = 200, message = "Enrigistrer Les types de contrats ") })
public ResponseEntity enrigistrerTypesDeContrat(@ApiParam(value = "${contrat.recuperation.param.id}") @PathVariable long idContrat, @RequestBody TypesConformites tcf) {
if (log.isDebugEnabled()) {
log.debug("appel de la méthode enrigistrerTypesDeContrat");
}
System.out.println("Voila "+tcf.getDeclaration());
return ResponseEntity.ok(HttpStatus.OK);
}
该控制器映射良好,其中的其他方法工作正常,但我使用的所有方法都是 Get 方法。
我之前所做的是创建一个用作 RequestBody 的类:
@Getter @Setter
public class TypesConformites {
private int declaration;
private ArrayList<Item> items;
public TypesConformites() {
}
}
这是我的项目类:
@Getter @Setter
public class Item {
private int id;
private String title;
private boolean isSelected;
public Item() {
}
}
我在 Java 中收到此错误:
块引用
JSON 解析错误:无法识别的字段“isSelected”(com.apicil.cosy.contrat.controller.api.impl.external.Item 类),未标记为可忽略;嵌套异常是 com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException:无法识别的字段“isSelected”(com.apicil.cosy.contrat.controller.api.impl.external.Item 类),未标记为可忽略(3 个已知属性: "title", "id", "selected"]) 在 [Source: (PushbackInputStream); 行:1,列:66](通过引用链:com.apicil.cosy.contrat.controller.api.impl.external.TypesConformites["items"]->java.util.ArrayList[0]->com.apicil .cosy.contrat.controller.api.impl.external.Item["isSelected"])
该代码有什么问题,任何帮助将不胜感激。
解决方案
通常,该项目由杰克逊反序列化,如下所示:-
public void setId(String firstName) {
public void setTitle(String lastName) {
public void setSelected(boolean isActive) {
为避免这种情况,您可以更改项目和请求正文中的映射名称.. 或用您的 isSelected 注释@JsonProperty
推荐阅读
- c# - MVC C# 创建用户名密码
- xml - 尝试对服务器进行身份验证时由对等方重置连接
- python - 当序列在任一端具有特定值时,将 numpy 数组拆分为子数组
- android - 材料主题错误 - 您需要在此活动中使用 Theme.AppCompat 主题(或后代)
- openlayers-5 - 使用 OpenLayers 5 显示地理参考图像
- c# - C# - 计算字符串列表中周围字符的总和
- c# - 如何更改启动形式?
- java - 如何以编程方式设置Checked单选按钮(动态创建的单选按钮)android
- gradle - 使用 Gradle Kotlin DSL 进行集成测试
- c - 使用计时器逐块读取文件