【问题标题】:How to insert JSON object into database using spring boot and angularjs?如何使用spring boot和angularjs将JSON对象插入数据库?
【发布时间】:2019-12-02 05:22:30
【问题描述】:

我是 Spring Boot 新手,所以这个问题可能听起来很傻。我想在数据库中插入一个 json 对象。但这给了我一个错误,例如: “无法评估 Jackson 反序列化的类型”。 在控制台上,我收到如下错误:

Http 415 不支持的 JSON 媒体类型错误

这是我的 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.");
    }); 
}

【问题讨论】:

  • 可能是因为List上没有泛型类型吧?试试添加吧?
  • AngularJS $http 服务自动对数据进行字符串化。做两次是否明智?
  • 发布 _data 的控制台输出。
  • adhaarCard: ""1111111111"" 等级: 等级: {ssc: "83", hsc: "67", qoneGrade: "60"} 毕业: {ssc: "SSC", hsc: " HSC", quOne: "Eng"} 专业化: {ssc: "NA", hsc: "Scii", qoneSpl: "comp sci."} 大学: {ssc: "Nasik", hsc: "Nasik", qoneUni: "浦那”} 年:{ssc:“2007”,hsc:“2009”,qoneYear:“2013”​​}

标签: java json angularjs spring-boot spring-data-jpa


【解决方案1】:

您从 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 ;

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")

【讨论】:

    【解决方案2】:

    在 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 的字符串等价物”。

    【讨论】:

    • 抛出错误:“类型不匹配:无法从 MediaType 转换为 String[]”
    • 尝试使用“application/json”代替 MediaType.APPLICATION_JSON
    猜你喜欢
    • 1970-01-01
    • 2020-11-19
    • 2015-07-25
    • 1970-01-01
    • 2016-11-06
    • 1970-01-01
    • 1970-01-01
    • 2018-01-13
    • 1970-01-01
    相关资源
    最近更新 更多