Could not find acceptable representation(已解决)

2年前 (2022) 程序员胖胖胖虎阿
329 0 0

在网上找了几个相关问题的解决方案,整理如下:
1、@ResponseBody 方法的返回类型由JSONObject改为 Object, return时直接返回Object;
2、@ResponseBody 方法的返回类型由JSONObject改为 String, return时直接返回JSONObject.fromObject(object).toString();
3、方法名跟页面、js重合需要修改函数名.

大致整理出以下两个原因:
1、返回的字符串不符合json格式
2、当用户请求 /login.html 时,spring会查找/login对应的控制器,并得到其返回的文档类型为application/json, 然后判断它与后缀名.html文档类型是否匹配,如果不匹配,就报HttpMediaTypeNotAcceptableException了

我这里出现报错是由于第一个原因引发的,但和网络上大家提到的层次不一样,不是由于json转换格式的模块引发的,而是由于自己重写的toString方法引发的,所以暂且贴一下,代码水平很低,大家不用管。 方案大致看看,个人感觉出现问题的原因相对比较重要。

我在这里出现的问题是,在向前端返回的类中我重写了toString()方法,在前端将数据转换为json的String格式时,调用了toString()方法,由于这部分输出的String与json格式不符,导致报错状态码406。
原代码:

package com.group.psms.view;

public class TokenView {
    int status;
    String token;
    AccountView accountView;
    
    public TokenView(int status, String token, AccountView accountView) {
        this.status = status;
        this.token = token;
        this.accountView = accountView;
    }

    @Override
    public String toString() {
        return "TokenView{" +
                "TokenView='" + token + '\'' +
                ", accountView=" + accountView +
                '}';
    }
}

因此此处调用了lombok的@Data方法,去除了自己修改了参数了toString方法

修改后:

package com.group.psms.view;

import lombok.Data;

@Data
public class TokenView {
    int status;
    String token;
    AccountView accountView;

    public TokenView(int status, String token, AccountView accountView) {
        this.status = status;
        this.token = token;
        this.accountView = accountView;
    }
    
}

后面再看了一下,最大的问题应该是json类型转换的时候应该是调用了各个类属性的get方法,而lombok的@Data注解提供了这些get方法,最近不想动,具体是添加get方法还是使用符合JSONString格式的toString()方法,我就不测试了,目测应该是get方法更重要一些。

版权声明:程序员胖胖胖虎阿 发表于 2022年9月22日 下午1:08。
转载请注明:Could not find acceptable representation(已解决) | 胖虎的工具箱-编程导航

相关文章

暂无评论

暂无评论...