简体   繁体   English

AJAX POST JSON 到 Spring Controller 给出 JsonParseException

[英]AJAX POST JSON to Spring Controller Gives JsonParseException

Despite looking at all similar posts I'm unable to figure out my problem.尽管查看了所有类似的帖子,但我还是无法弄清楚我的问题。 I'm storing the response body JSON object of one AJAX call in a global variable and sending it back in another POST request to my Spring controller like so:我将一个 AJAX 调用的响应主体 JSON object 存储在一个全局变量中,然后在另一个 POST 请求中将其发送回我的 Spring controller,如下所示:

$(document).on("click", "#claimButton", function(){
        console.log(JSON.stringify(groupJSON));
        $.ajax({
            headers: {
                'Accept': 'application/json',
                'Content-Type': 'application/json'
            },
            type: "POST",
            url: "/Claim",
            data: {"group": JSON.stringify(groupJSON)},
            dataType: "json",
            success: function(result){

            }
        })
    });

I've also tried replacing JSON.stringify(groupJSON) with groupJSON but it made no difference.我也试过用 groupJSON 替换groupJSON JSON.stringify(groupJSON)但它没有任何区别。

My controller takes group in the request body:我的 controller 在请求正文中分组:

@PostMapping(value = "/Claim", produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE)
    public String groupClaim(@RequestBody Group group){
        return "Claim";
    }

But Spring gives the following error:但是 Spring 给出了以下错误:

Resolved [org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Unrecognized token 'group': was expecting (JSON String, Number, Array, Object or token 'null', 'true' or 'false'); nested exception is com.fasterxml.jackson.core.JsonParseException: Unrecognized token 'group': was expecting (JSON String, Number, Array, Object or token 'null', 'true' or 'false')
 at [Source: (PushbackInputStream); line: 1, column: 7]]

Printing the JSON to console I get:将 JSON 打印到控制台我得到:

{"groupID":1,"groupName":"bobby","groupMembers":[{"password":"$2a$12$lRi5zjM1MgZq7lxs9cfp4O4JC1UIAE50WztJOpeX6Yu4F1epD5Qbm","email":"bob@","roles":[{"name":"Admin","id":3},{"name":"Student","id":1}],"userId":1,"username":"bob"}],"framework":{"frameworkID":45,"frameworkName":"test","frameworkFoci":[{"focusCategory":"","focusName":"Math","focusExplanation":"","focusId":1}],"groups":[{"groupID":3,"groupName":"ds","groupMembers":[{"password":"$2a$12$lRi5zjM1MgZq7lxs9cfp4O4JC1UIAE50WztJOpeX6Yu4F1epD5Qbm","email":"bob@","roles":[{"name":"Admin","id":3},{"name":"Student","id":1}],"userId":1,"username":"bob"}],"framework":45},1]}}

Which when passed to a validator came back as valid.当传递给验证器时返回有效。

Group Entity:集团实体:

@Table(name="FocusGroups")
@Entity
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class,
        property = "groupID")
public class Group {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long groupID;
    private String groupName;
    
    @ManyToMany
    @JoinTable(name = "GroupMembers",
            joinColumns = @JoinColumn(
                    name = "groupID"),
            inverseJoinColumns = @JoinColumn(
                    name = "userID"))
    private Set<User> groupMembers = new HashSet<>();

    @ManyToOne(fetch = FetchType.EAGER, optional = false)
    @JoinColumn(name="frameworkID", nullable = false)
    private Framework framework;

    protected Group(){}

    public Group(String groupName, Set<User> groupMembers) {
        this.groupName = groupName;
        //this.foci = foci;
        this.groupMembers = groupMembers;
    }

    public Long getGroupID() {
        return groupID;
    }

    public void setGroupID(Long groupID) {
        this.groupID = groupID;
    }

    public String getGroupName() {
        return groupName;
    }

    public void setGroupName(String groupName) {
        this.groupName = groupName;
    }

    public Set<User> getGroupMembers() {
        return groupMembers;
    }

    public void setGroupMembers(Set<User> groupMembers) {
        this.groupMembers = groupMembers;
    }

    public Framework getFramework() {
        return framework;
    }

    public void setFramework(Framework framework) {
        this.framework = framework;
    }
}

What is causing this error?是什么导致了这个错误?

Changing data: {"group": JSON.stringify(groupJSON)} to data: JSON.stringify(groupJSON) did the trick.data: {"group": JSON.stringify(groupJSON)}更改为data: JSON.stringify(groupJSON)就成功了。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM