首页 > 解决方案 > 无法从 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"])

该代码有什么问题,任何帮助将不胜感激。

标签: javascriptjavareactjsspring-boot

解决方案


通常,该项目由杰克逊反序列化,如下所示:-

public void setId(String firstName) {

public void setTitle(String lastName) {

public void setSelected(boolean isActive) {

为避免这种情况,您可以更改项目和请求正文中的映射名称.. 或用您的 isSelected 注释@JsonProperty


推荐阅读