使用com.alibaba.fastjson.JSON中JSON.parseObject方法将参数转为对象失败,BufferedReader中使用readLine获取某个参数失败

文章讨论了前端通过POST方式提交JSON对象到后端时遇到的问题,后端在使用BufferedReader读取并解析为Banner对象时,参数可能出现空值。解决方案包括前端确保JSON字符串化和后端检查POJO类的setter和getter方法是否完整。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述

前端

前端通过post方式提交了对象

{
    "isTop": 0,
    "img_title": "撒打发士大夫",
    "author": "阿发送达方式大",
    "title": "按时发大水",
    "img_src": "files\\addIndexBanner\\2023-05-20\\20230520115853874.jpg",
    "content": "<p>发沙发撒地方</p>",
    "releaseDateTem": "2023-05-20 11:58:57",
    "status": "1"
}

后端

后端通过使用BufferedReader 的readLine方法将参数读取,并调用JSON.parseObject方法将其解析为Banner类型的对象

 BufferedReader br = req.getReader();
 String params = br.readLine(); //json字符串
 //转为Brand对象
 Banner banner = JSON.parseObject(params, Banner.class);

错误

  1. 后端的params 可能根本拿不到,全部参数为空
  2. 后端的params 中部分字段为null,拿不到

解决

下面两项依次检查

如果全部字段为空

前端需要将JSON转为JSON字符串

	var myData = {
		//是否置顶,默认否,0
		isTop:0,
	};
	myData.img_title = $("#img_title").val();
	myData.author = $("#author").val();
	myData.title = $("#title").val();
	myData.img_src = $("#imgSrc").val();
	myData.content = content;
	myData.releaseDateTem = $("#releaseDateTem").val();
	// 0 草稿,1发布
	myData.status = type;
	console.log(myData);
	x = JSON.stringify(myData)

注意 x = JSON.stringify(myData),此时你在提交x即可

如果部分字段为空

你需要检查你的pojo类,按照我上面的代码来说,应该检查Banner类,看看类中是否给所有的字段都生成了setter和getter,一般是有的字段没有生成造成的。

16:29:33.734 DEBUG o.s.web.servlet.DispatcherServlet - GET "/base/chat?question=%E4%BD%A0%E5%A5%BD", parameters={masked} 16:29:33.745 DEBUG o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped to com.igruel.Deepseek.DeepSeekController#chat(String) 16:29:40.194 DEBUG o.s.web.servlet.DispatcherServlet - Failed to complete request: com.alibaba.fastjson.JSONException: not close json text, token : { 16:29:40.511 ERROR o.a.c.c.C.[.[.[.[dispatcherServlet] - Servlet.service() for servlet [dispatcherServlet] in context with path [/base] threw exception [Request processing failed; nested exception is com.alibaba.fastjson.JSONException: not close json text, token : {] with root cause com.alibaba.fastjson.JSONException: not close json text, token : { at com.alibaba.fastjson.parser.DefaultJSONParser.close(DefaultJSONParser.java:1556) at com.alibaba.fastjson.JSON.parseObject(JSON.java:398) at com.alibaba.fastjson.JSON.parseObject(JSON.java:298) at com.alibaba.fastjson.JSON.parseObject(JSON.java:588) at com.igruel.Deepseek.DeepSeekService.chat(DeepSeekService.java:48) at com.igruel.Deepseek.DeepSeekController.chat(DeepSeekController.java:20) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:568) at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandl
最新发布
03-17
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值