Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 538|回复: 0

解决请求接口要以JSON格式请求后端的问题

[复制链接]
  • TA的每日心情
    奋斗
    2024-11-24 15:47
  • 签到天数: 804 天

    [LV.10]以坛为家III

    2053

    主题

    2111

    帖子

    72万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    726782
    发表于 2021-4-25 09:21:38 | 显示全部楼层 |阅读模式

    一开始就跟平常一样写好接口就给前端。发现老是500方法进不来发现是请求头Content-Type的问题导致的

    相关知识:

    (1):我们默认使用的表单和Jquery默认的Ajax请求,Content-Type都是默认采用:application / x-www-form-urlencoded

    (2):提交的数据按照username = qiu&password = 123的方式进行编码,key和val都进行了URL转码,

    (3):现在越来越多的人把它作为请求头,用来告诉服务端消息主体是序列化后的JSON字符串

    (4):所以在(@RequestParam(value =“token”)String token,String columnId)这样是能获取的到数据的

    1:在@RequestMapping()中加入produce =“application / json; charset = UTF-8”设置请求头为json格式

    @RequestMapping(value = "queryDriverEvaluateById",produces = "application/json;charset=UTF-8")
    @ResponseBody

    发现还是500方法进不来   网上很多例子都是到这步有些就成功可以请求了,但是我的还是不行。

    2:后来找到@RequestBody,来自于com.alibaba.fastjson 

    相关知识:

    (1):@ RequestBody接收的是一个Json的对象的字符串

    (2):@ RequestBody需要把所有请求参数作为JSON解析,因此,不能包含键=值这样的写法在请求URL中,所有的请求参数都是一个JSON

    (3):直接通过浏览器输入URL时,@ RequestBody获取不到JSON对象,需要用的Java编程或者基于AJAX的方法请求,将内容类型设置为应用/ JSON

    在参数上写@RequestBody JSONObject jsonObject 

    queryDriverEvaluateById(@RequestBody JSONObject jsonObject)

     终于发现debug打断点不在报错了,方法进来了。

    JSONObject在api中是用一个私有的常量map进行封装的,实际就是一个map,只不过FastJson对其进行了封装可以通过   

    String columnId = jsonObject.getString("columnId"); 

    获取到数据。有点类似于当前学习Servlet一个一个获取参数(PS:其实就是Map键值对啦)。 

    3:虽然不在500报错连方法都进不来了。不过这样写1到两个参数还好,多了还不得累死!所以继续去找解决办法!

    如果是多个参数,封装成一个对象,或者本来是一个对象。

    能不能通过类似于Spring MVC直接在参数上写对象让框架请求初始化时自动去找设置方法注入属性值呢?

    直接形参上写    

    @RequestBody DriverEvaluate driverEvaluate

    传入的JSON格式字符串自动转为对象!

    发现这样是可以做到的,有一点需要注意如果请求需要通过网络传输在实体内需要实现Serializable序列化。

    JSON传输的请求格式如这样:

    {
            "qiujian": "112",
            "password": "111",
            "token": "eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiJqd3312312QiLCJpYXQiOjE1NDIwOTA1MTEsInN1YiI6IntcImpwYXBpXCI6XCJqcCFAI1wifSIsImV4cCI6MTU0MjA5MjMxMX0.Jr6LZHMF4i-4aWby7V6GFDKodV11fak-Vzgx-n9Wls0"
    }

     

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2025-1-24 07:16 , Processed in 0.054913 second(s), 28 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表