【http 请求返回状态码 500 】 Spring Boot 模拟http请求「建议收藏」

【http 请求返回状态码 500 】 Spring Boot 模拟http请求「建议收藏」背景最近弄的项目中要求给另外一个服务器传送数据,预定是用http的方式,在开始动手之前我打算用SpringBoot模拟下服务器之间的请求流程:服务器A发起POST请求将Json格式的数据发送到服务器B,服务器B要回传”success”,当服务器A接收到”success”后表示数据发送成功@ControllerpublicclassMyController{/***服务器A*/@ResponseBody@RequestMap.

大家好,又见面了,我是你们的朋友全栈君。

背景

最近弄的项目中要求给另外一个服务器传送数据,预定是用http的方式,在开始动手之前我打算用Spring Boot模拟下服务器之间的请求

流程:  服务器A发起POST请求将Json格式的数据发送到服务器B,服务器B要回传”success”,当服务器A接收到”success”后表示数据发送成功

@Controller
public class MyController {
 
   /*
    **  服务器A
    */

    @ResponseBody
    @RequestMapping(value = "/send", method = RequestMethod.GET)
    public String function8(){
        String sendMsg = (new User("1","12","123")).toString();
        String data = "this is null string";
        String url = "http://localhost:8080/receive";
        try {
            data = HttpHelper.ShareHelper().Post(url, sendMsg, "UTF-8", null,
                    new HttpHelperRequestHandler() {
                        @Override
                        public void OnPreSend(URLConnection request) {
                            request.addRequestProperty("Content-type", "application/json");
                        }
                    });
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            if(!("success".equals(data))){
                System.out.println("服务器A:"+"发送通知失败");
            }else{
                System.out.println("服务器A:"+"发送通知成功");
            }
        }



        return "xixi";
    }


    /*
    **  服务器B
    */

    @ResponseBody
    @RequestMapping("/receive")
    public String hello111(@RequestBody String user){
        System.out.println("服务器B:"+"接收成功,接收的到数据:");
        return "success";
    }

}

点击运行之后,和预期显示的一样

【http 请求返回状态码 500 】 Spring Boot 模拟http请求「建议收藏」

偶然间,我发现如果服务器B不用注解@ResponseBody的话,服务器B仍然能接收到数据,但是服务器A这边会报500错误

【http 请求返回状态码 500 】 Spring Boot 模拟http请求「建议收藏」

【http 请求返回状态码 500 】 Spring Boot 模拟http请求「建议收藏」 (自己打印的)

 @ResponseBody的作用是将返回的数据变成Json格式

也就是说在服务器A这边原本要用data接收Json格式的”success”,但是服务器B却返回了一个 Object 过来,因此导致出现500错误码

 

解决:

如果不用注解 @ResponseBody的话,就给服务器B这边的response设置ContentType为application/json,然后通过输出流来回写”success”

@Controller
public class MyController {

    /*
    **  服务器A
    */

    @ResponseBody
    @RequestMapping(value = "/send", method = RequestMethod.GET)
    public String function8(){
        String sendMsg = (new User("1","12","123")).toString();
        String data = "this is null string";
        String url = "http://localhost:8080/receive";
        try {
            data = HttpHelper.ShareHelper().Post(url, sendMsg, "UTF-8", null,
                    new HttpHelperRequestHandler() {
                        @Override
                        public void OnPreSend(URLConnection request) {
                            request.addRequestProperty("Content-type", "application/json");
                        }
                    });
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            if(!("success".equals(data))){
                System.out.println("服务器A:"+"发送通知失败"+data);
            }else{
                System.out.println("服务器A:"+"发送通知成功"+data);
            }
        }



        return "xixi";
    }


    /*
    **  服务器B
    */

    @RequestMapping("/receive")
    public void hello11(@RequestBody String user,HttpServletResponse response){
        System.out.println("服务器B:"+"接收成功,接收的到数据:"+user);
        response.setContentType("application/json");
        try{
            PrintWriter write = new PrintWriter(new OutputStreamWriter(response.getOutputStream(), "UTF-8"));
            write.print("success");
            write.flush();
        }catch(Exception e){

        }
    }

}

运行之后

【http 请求返回状态码 500 】 Spring Boot 模拟http请求「建议收藏」

 

总结 

出现500错误,一般是接收方那边程序报错,具体问题还要接收方那边反应,可能是没有正确处理好数据的接收或者数据的回写,其主要是对数据格式的检查。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/151655.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • RabbitMQ入门案例【java资源库:http://www.gxcode.top/code】[通俗易懂]

    一.编写RabbitMQ入门案例一.搭建项目1.创建maven项目(springboot-jar)2.修改pom.xml文件org.springframework.bootspring-boot-starter-parent2.0.2.RELEASEorg.springframework.bootspring-boot-starter-weborg.spring…

    2022年4月8日
    39
  • windowshello指纹识别器_win10指纹驱动安装失败

    windowshello指纹识别器_win10指纹驱动安装失败首先,需要确认你的电脑安装有指纹识别设备,有的笔记本自带的就是指纹扫描器(例如MS酋长的惠普248G1笔记本),没有的可以考虑加装外设型的指纹识别设备。并且确认已经安装了指纹识别设备的驱动程序,方法是打开“设备管理器”,在其中查看有无“生物识别设备”。如图:然后进入“设置–帐户–登录选项”,即可在右侧空格中找到“WindowsHello”设置项。如图:点击“指纹”下的“设置”按钮,会…

    2022年8月10日
    22
  • 利用人工势场法的最短路径寻找

    利用人工势场法的最短路径寻找人工势场法也可以用作机器人避障。我目前思考的是使其作为全局规划器,规划全局路径,也可以做局部规划直接下达至速度计算,目前暂时先看看全局路径计算。它将整个地图环境抽象为势场,机器人同时受到目标点的引力与障碍物的斥力,向合力的方向移动,当机器人逐步接近障碍物,受到的斥力越来越大以致偏离障碍物,达到避障的效果。如果做一个简化,每次计算便向合力方向延伸一个步长,便可逐渐到达终点。在栅格地图中,障碍物很…

    2022年6月18日
    38
  • 基于php教师档案管理系统毕业设计

    基于php教师档案管理系统毕业设计获取项目源文件,联系Q:1415736481,可指导毕设,课设随着经济的发展和社会的进步,高校的现代化管理逐渐被人们所重视,利用计算机对高校的管理在各个领域中都有广阔的发展空间和前景。高校教师档案管理系统的设计与实现对高等院校的决策者和管理者来说至关重要,对教育系统来说更是不可缺少的。本系统采用PHP语言和MySQL数据库等技术,基于B/S模式,根据管理员、教务处管理员、教师三种不同的用户权限…

    2025年6月27日
    3
  • VBA基础知识整理[通俗易懂]

    VBA基础知识整理[通俗易懂]最近由于项目的需要,需要在Excel自定义一些函数,来完成特殊的处理,为了完成工作,就囫囵吞枣的写了一些代码,现在闲暇下来,就好好的学习一下,VBA的基础知识。1.变量1.Dim<>As<>2.规则变量名称必须使用一个字母作为第一个字符。变量名称不能使用空格,句点(.),感叹号(

    2022年6月3日
    54
  • 基于speech模块的久坐提醒小程序「建议收藏」

    基于speech模块的久坐提醒小程序「建议收藏」每天在电脑前坐很长的时间,因为有时候太过投入一下子就过去了若干个小时,容易猝死。于是心血来潮的想要写一个防久坐提醒小程序:第一种模式(最简单模式),若输入伏案工作时间数值不对则产生一个错误并退出。代码如下:importspeechimporttimeclassDebug:def__init__(self):self.start_time=time.time()self.minutes=int(input(“How

    2022年9月30日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号