簡體   English   中英

如何使用 spring boot 和 angularjs 將 JSON 對象插入數據庫?

[英]How to insert JSON object into database using spring boot and angularjs?

我是 Spring Boot 的新手,所以這個問題可能聽起來很傻。 我想在數據庫中插入一個 json 對象。 但它給了我一個錯誤,如:“無法評估 Jackson 反序列化類型”。 在控制台上,我收到如下錯誤:

JSON 的 Http 415 Unsupported Media type 錯誤

這是我的 POJO 類:

@Entity
@Table(name = "academics")
public class Academics {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id")
    private int id;
    @Column(name = "adhaarcard")
    private String adhaarCard;
    @Column(name = "grade")
    private List grades;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getAdhaarCard() {
        return adhaarCard;
    }

    public void setAdhaarCard(String adhaarCard) {
        this.adhaarCard = adhaarCard;
    }

    public List getGrades() {
        return grades;
    }

    public void setGrades(List grades) {
        this.grades = grades;
    }

}

我的控制器功能:

@RequestMapping(value="saveacademics",method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE)
    public ResponseEntity<Object> saveAvademics(@RequestBody Academics academics) {

        academicsService.save(academics);   

        URI location = ServletUriComponentsBuilder.fromCurrentRequest().path("/{id}")
                .buildAndExpand(academics.getId()).toUri();
        return ResponseEntity.created(location).build();    
}

Angularjs 代碼:

$scope.saveAcademics = function() {
    var adhaar = sessionStorage.getItem("emp-key");
    var _data = {
        "adhaarCard":adhaar,            
        "grades": {
            "graduation": 
                        { "ssc": "SSC", "hsc": "HSC", "quOne": $scope.qone
                        },
            "specialization": 
                        { 'ssc': "N.A", 'hsc': $scope.hscSpl, 'qoneSpl': $scope.qoneSpl},
            "grade": 
                        { 'ssc': $scope.sscGrade, 'hsc': $scope.hscGrade, 'qoneGrade': $scope.qoneGrade},
            "university": 
                        { 'ssc': $scope.sscUni, 'hsc': $scope.hscUni, 'qoneUni': $scope.qoneUni},
            "year": 
                        { 'ssc': $scope.sscYear, 'hsc': $scope.hscYear, 'qoneYear': $scope.qoneYear}
          }
    };      
    console.log(_data);
    $http({         
        url: 'saveacademics',
        method: "POST",
        data: JSON.stringify(_data)
    })
    .then(function(response) {
        alert("Success");
    }, 
    function(response) { // optional
        alert("Error Occoured.");
    }); 
}

在 MediaType.APPLICATION_JSON_VALUE 上嘗試 MediaType.APPLICATION_JSON

  @RequestMapping(value="saveacademics",method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON)

MediaType.APPLICATION_JSON是“application/json 的公共常量媒體類型”,而MediaType.APPLICATION_JSON_VALUE是“ MediaType.APPLICATION_JSON_VALUE的字符串等價物”。

您從 angular js 生成的 Json 與您的 Java pojo 不匹配。

更好的是你可以重新格式化json如下

{ adhaarCard: "12", grades : [
 { university: "univ name", specialization: "sadd", grade: 83, graduation:"SSC", year: 2007  },
 { university: "univ name", specialization: "sadd", grade: 67, graduation:"HSC", year: 2009 }
 ]
}

並將 PoJo 類映射為

    @Column(name = "adhaarcard")
       private String adhaarCard;
    @Column(name = "grade")
       private List<Grades> grades ;

成績.java

private String university;
private  String specialization;
private  int grade; 
private Sting graduation;
private  int year;

添加列映射和 getter、setter。

提示

您可以使用 @PostMapping 代替 @RequestMapping,這是一種簡寫。 所以你不會對媒體類型感到困惑,它以 application/json 作為默認類型。

@RequestMapping(value="saveacademics",method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE)

用。。。來代替

@PostMapping("saveacademics")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM