【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错误,一般是接收方那边程序报错,具体问题还要接收方那边反应,可能是没有正确处理好数据的接收或者数据的回写,其主要是对数据格式的检查。

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • C++ Opencv imfill 孔洞填充函数的实现(学习笔记)[通俗易懂]

    C++ Opencv imfill 孔洞填充函数的实现(学习笔记)[通俗易懂]C++Opencvimfill孔洞填充函数的实现函数实现的中心思想二值图寻找连通域的关键种子点的确定连通域的寻找过程条件设定最后赋值话不多说直接上函数代码主函数代码代码框截图实例图片运行结果函数实现的中心思想二值图此程序针对于二值图,寻找二值图中像素值为0的连通域,将所有连通域的像素点分别保存下来,将符合条件的连通域的像素值置为255;寻找连通域的关键针对填洞功能的实现,也就…

  • 词向量的作用

    词向量的作用      为了描述词与词之间的相似程度而构建的高维向量,而视频,音频数据构建本身意义,可以直接通过数据进行描述图像与声音的相似度。

  • 单点登录之CAS原理和实现

    单点登录之CAS原理和实现1.开源单点登录系统CAS入门1.1什么是单点登录单点登录(SingleSignOn),简称为SSO,是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。我们目前的系统存在诸多子系统,而这些子系统是分别部署在不同的服务器中,那么使用传统方式的session是无法解决的,我们需要使用相关的单点登录技术来解决。1.2什

  • Java 定时器_Javaweb定时器

    Java 定时器_Javaweb定时器上篇提到了阻塞队列,本篇我们将优先级队列和阻塞队列结合,得到阻塞优先队列,以此来实现一个定时器~定时器定义应用场景定时器的实现:定时器构成代码实现:代码分析:忙等一处唤醒,两处阻塞附最终全部代码:完整的执行过程:定义定时器,是多线程编程中的一个重要/常用组件定时器可以强制终止请求:浏览器内部都有一个定时器,发送请求后,定时器就开始计时;若在规定时间内,响应数据没有返回,就会强制终止请求定时器,有些逻辑不想立刻执行,而是要等一定的时间之后,再来执行好比一个闹钟,在我们设定好闹钟时间后,到时

  • Nmap常用命令总结「建议收藏」

    Nmap常用命令总结「建议收藏」1.nmap-sT192.168.96.4//TCP连接扫描,不安全,慢2.nmap-sS192.168.96.4//SYN扫描,使用最频繁,安全,快3.nmap-Pn192.168.96.4//目标机禁用ping,绕过ping扫描4.nmap-sU192.168.96.4//UDP扫描,慢,可得到有价值的服务器程序5.nmap-sI僵…

  • EOS智能合约授权限制和数据存储

    EOS智能合约授权限制和数据存储

发表回复

您的电子邮箱地址不会被公开。

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