org.springframework.web.client.HttpClientErrorException$NotFound: 404 null

本文记录了作者在运行SpringCloud项目时遇到的404错误,并详细描述了解决这一问题的过程。通过仔细检查代码,最终定位到路径设置不当的问题并成功修复。

【踩坑的一天】
springCloud报错信息:
org.springframework.web.client.HttpClientErrorException$NotFound: 404 null
今天运行一个springcloud项目,报错如上所示,控制台信息如下
在这里插入图片描述
这种报错一般是路径的问题,仔细检查代码后发现了问题所在
在这里插入图片描述
修改后正确运行。

服务端报错为: 09-30-2025 10:25:33.723 WARN [https-openssl-nio-8081-exec-6] [TID: N/A] [Reqid: ] [ReqTime: ] c.t.c.v.c.c.SourceType: unknown SourceType name: null 09-30-2025 10:25:33.727 WARN [https-openssl-nio-8081-exec-6] [TID: N/A] [Reqid: ] [ReqTime: ] o.s.w.s.s.t.h.DefaultSockJsService: "Invalid SockJS path '/230/xgydnmu0/websocket/info' - required to have 3 path segments" 客户端报错为: 10:25:33.658 [main] DEBUG org.springframework.web.socket.sockjs.client.RestTemplateXhrTransport - Executing SockJS Info request, url=https://127.0.0.1:8081/api/vms/vms-8ff225f900a44a90a937143fe6774a98/ws/status/230/xgydnmu0/websocket/info 10:25:33.662 [main] DEBUG org.springframework.web.client.RestTemplate - HTTP GET https://127.0.0.1:8081/api/vms/vms-8ff225f900a44a90a937143fe6774a98/ws/status/230/xgydnmu0/websocket/info 10:25:33.729 [main] DEBUG org.springframework.web.client.RestTemplate - Response 404 NOT_FOUND 10:25:33.731 [main] ERROR org.springframework.web.socket.sockjs.client.SockJsClient - Initial SockJS "Info" request to server failed, url=wss://127.0.0.1:8081/api/vms/vms-8ff225f900a44a90a937143fe6774a98/ws/status/230/xgydnmu0/websocket org.springframework.web.client.HttpClientErrorException$NotFound: 404 : [no body] at org.springframework.web.client.HttpClientErrorException.create(HttpClientErrorException.java:113) at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:168) at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:122) at org.springframework.web.client.ResponseErrorHandler.handleError(ResponseErrorHandler.java:63) at org.springframework.web.client.RestTemplate.handleResponse(RestTemplate.java:819) at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:777) at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:751) at org.springframework.web.socket.sockjs.client.RestTemplateXhrTransport.executeInfoRequestInternal(RestTemplateXhrTransport.java:138) at org.springframework.web.socket.sockjs.client.AbstractXhrTransport.executeInfoRequest(AbstractXhrTransport.java:128) at org.springframework.web.socket.sockjs.client.SockJsClient.getServerInfo(SockJsClient.java:294) at org.springframework.web.socket.sockjs.client.SockJsClient.doHandshake(SockJsClient.java:260) at org.springframework.web.socket.messaging.WebSocketStompClient.connect(WebSocketStompClient.java:270) at org.springframework.web.socket.messaging.WebSocketStompClient.connect(WebSocketStompClient.java:250) at com.tplink.cloud.demo.websocket_client.WebsocketClientApplication.main(WebsocketClientApplication.java:49) 10:25:33.731 [main] DEBUG org.springframework.messaging.simp.stomp.DefaultStompSession - Failed to connect session id=5c7c9829-04f6-37d4-abcd-75ddf3a60537 org.springframework.web.client.HttpClientErrorException$NotFound: 404 : [no body] at org.springframework.web.client.HttpClientErrorException.create(HttpClientErrorException.java:113) at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:168) at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:122) at org.springframework.web.client.ResponseErrorHandler.handleError(ResponseErrorHandler.java:63) at org.springframework.web.client.RestTemplate.handleResponse(RestTemplate.java:819) at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:777) at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:751) at org.springframework.web.socket.sockjs.client.RestTemplateXhrTransport.executeInfoRequestInternal(RestTemplateXhrTransport.java:138) at org.springframework.web.socket.sockjs.client.AbstractXhrTransport.executeInfoRequest(AbstractXhrTransport.java:128) at org.springframework.web.socket.sockjs.client.SockJsClient.getServerInfo(SockJsClient.java:294) at org.springframework.web.socket.sockjs.client.SockJsClient.doHandshake(SockJsClient.java:260) at org.springframework.web.socket.messaging.WebSocketStompClient.connect(WebSocketStompClient.java:270) at org.springframework.web.socket.messaging.WebSocketStompClient.connect(WebSocketStompClient.java:250) at com.tplink.cloud.demo.websocket_client.WebsocketClientApplication.main(WebsocketClientApplication.java:49) org.springframework.web.client.HttpClientErrorException$NotFound: 404 : [no body] at org.springframework.web.client.HttpClientErrorException.create(HttpClientErrorException.java:113) at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:168) at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:122) at org.springframework.web.client.ResponseErrorHandler.handleError(ResponseErrorHandler.java:63) at org.springframework.web.client.RestTemplate.handleResponse(RestTemplate.java:819) at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:777) at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:751) at org.springframework.web.socket.sockjs.client.RestTemplateXhrTransport.executeInfoRequestInternal(RestTemplateXhrTransport.java:138) at org.springframework.web.socket.sockjs.client.AbstractXhrTransport.executeInfoRequest(AbstractXhrTransport.java:128) at org.springframework.web.socket.sockjs.client.SockJsClient.getServerInfo(SockJsClient.java:294) at org.springframework.web.socket.sockjs.client.SockJsClient.doHandshake(SockJsClient.java:260) at org.springframework.web.socket.messaging.WebSocketStompClient.connect(WebSocketStompClient.java:270) at org.springframework.web.socket.messaging.WebSocketStompClient.connect(WebSocketStompClient.java:250) at com.tplink.cloud.demo.websocket_client.WebsocketClientApplication.main(WebsocketClientApplication.java:49) 代码为: @SpringBootApplication public class WebsocketClientApplication { public static void main(String[] args) throws InterruptedException { // 禁用SSL验证 SSLUtil.disableSSLVerification(); // WebSocketClient webSocketClient = new StandardWebSocketClient(); List<Transport> transports = new ArrayList<>(2); transports.add(new WebSocketTransport(new StandardWebSocketClient())); transports.add(new RestTemplateXhrTransport()); SockJsClient webSocketClient = new SockJsClient(transports); WebSocketStompClient stompClient = new WebSocketStompClient(webSocketClient); stompClient.setMessageConverter(new StringMessageConverter()); String url = "wss://127.0.0.1:8081/api/vms/vms-8ff225f900a44a90a937143fe6774a98/ws/status/230/xgydnmu0/websocket"; // 添加头,握手的那些http,比如cookie final WebSocketHttpHeaders headers = new WebSocketHttpHeaders(); headers.set("Cookie", "JSESSIONID=071E7C1E999C236D84816FFD77346BF4; VMS_SID=v-90712b3e-2313-4990-b512-31efe00a040d"); // 头部字段 final StompHeaders connectHeaders = new StompHeaders(); // connectHeaders.setLogin("user1"); // connectHeaders.setPasscode("123456"); // 链接到服务端 stompClient.connect(url, headers, connectHeaders, new StompSessionHandlerAdapter() { @Override public void afterConnected(StompSession session, StompHeaders connectedHeaders) { // 订阅用户消息 session.subscribe("/user/exchange/amq.direct/trade", new StompFrameHandler() { @Override public Type getPayloadType(StompHeaders headers) { return String.class; } @Override public void handleFrame(StompHeaders headers, Object payload) { System.out.println("收到订阅的 /user/exchange/amq.direct/trade 消息:" + payload); } }); // 发送更新消息 session.send("/app/trade", "更新消息"); } @Override public void handleException(StompSession session, StompCommand command, StompHeaders headers, byte[] payload, Throwable exception) { exception.printStackTrace(); } @Override public void handleTransportError(StompSession session, Throwable exception) { exception.printStackTrace(); } }); TimeUnit.SECONDS.sleep(1000); } }
10-01
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

谦谦均

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值