Could not find acceptable representation(已解决)

在网上找了几个相关问题的解决方案,整理如下:
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方法更重要一些。

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值