【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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • plsqldev连接oracle 弹出一个小窗口没有登录[通俗易懂]

    plsqldev连接oracle 弹出一个小窗口没有登录[通俗易懂]昨天已经顺利安装完oracle和PLSQL,今天打开电脑用PLSQL登录时,却发现怎么也登录不进去,上网找了好多办法解答办法原来是:用管理员身份运行一下结果好了!

    2022年4月25日
    202
  • Date与Quartz的cron之间的相互转换「建议收藏」

    Date与Quartz的cron之间的相互转换「建议收藏」实现Date与Quartz的cron之间的相互转换.

    2022年6月17日
    30
  • 现代语音信号处理笔记 (一)

    现代语音信号处理笔记 (一)本系列笔记对胡航老师的现代语音信号处理这本书的语音处理部分进行总结,包含语音信号处理基础、语音信号分析、语音编码三部分。一开始以为三部分总结到一篇文章里就可以了,但写着写着发现事情并没有那么简单。。。因此还是老老实实的总结吧,扎实的基础最重要。语音信号处理基础语音信号的处理简称语音处理,是用数字信号处理技术对语音信号进行处理的一门学科。语音信号均采用数字方式进行处理,语音信号的数字…

    2022年5月26日
    40
  • 乱码_idea控制台中文乱码解决不了

    乱码_idea控制台中文乱码解决不了IntelliJIDEA如果不进行配置的话,运行程序时控制台中文乱码问题会非常严重,甚至影响我们对信息的获取和程序的跟踪。通过历年的开发经验,在本文中我总结出四点用于解决控制台中文乱码问题的方法,希望有助于大家。

    2025年6月12日
    14
  • IDEA激活成功教程后一直提示JetbrainsAgent 相关的弹框问题

    IDEA激活成功教程后一直提示JetbrainsAgent 相关的弹框问题激活成功教程后打开IDEA就弹框,关闭之后会自动打开浏览器,隔一会也会弹出来 也是一样的问题一开始是说把txt 和 jar 文件放一个路径下之类的方法,几经波折,发现没任何用处~最后各种搜索排查,在设置下更改配置就不弹啦~settings设置下搜索agent 取消”Instrumenting agent(requires debugger restart)”在 Reload classes after compilation:选择第一个 Always…

    2022年8月19日
    4
  • 为matlab GUI添加背景图片

    为matlab GUI添加背景图片为matlabGUI添加背景图片为GUI添加一个背景图片,不仅可以让我们的界面变得漂亮大气上档次,而且软件对与用户的交互更加友好。用C或者C++写过软件界面的人都知道,这件事情可以轻而易举的办到,那么问题来了,怎么为matlab的GUI添加一个背景图片呢?其实这个操作也很简单,但是如果是第一次做这个,可能需要折腾好久。在这里我希望跟大家分享一下这个小技巧,避免大家遇到同样的问题再走弯路。欢迎…

    2022年6月12日
    31

发表回复

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

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