当前位置: 首页 > 知识库问答 >
问题:

Spring Boot WS-Server-自定义Http状态

林雅畅
2023-03-14

我使用Spring Boot WS-Server发布了endpoint

当我使用SoapUI时,我看到:

HTTP/1.1200接受:text/xml、text/html、image/gif、image/jpeg、*;q=.2,/;q=.2 SOAPAction:“内容类型:text/xml;字符集= UTF-8内容长度:828日期:星期四,2021年4月29日14:04:54 GMT保持生存:超时=60连接:保持生存

我想设置自定义HTTP状态作为响应(我知道这可能违反标准,但这是一个外部要求)。我还读了以下主题:

带void的Spring WS(DefaultWsdl11Definition)HTTP状态代码

但这个解决方案失败了

Spring Boot版本:2.2.7

共有1个答案

高泳
2023-03-14

问题解决了

正如我所说,我想在SOAP响应中设置自定义HTTP状态。

我发现了这篇帖子:Spring WS(DefaultWsdl11Definition)HTTP状态代码带有void

作者使用EndpointInterceptor和TransportContext来获取HttpServletResponse,然后更改了状态。我和他的案例之间的区别在于,他从WebService方法返回void,而我想返回一些响应。

在我的情况下,以下代码在Spring WebServiceMessageReceiverObjectSupport类(方法handleConnection)中覆盖以前在拦截器中设置的servlet状态:

if (response instanceof FaultAwareWebServiceMessage && connection instanceof FaultAwareWebServiceConnection) {
                    FaultAwareWebServiceMessage faultResponse = (FaultAwareWebServiceMessage)response;
                    FaultAwareWebServiceConnection faultConnection = (FaultAwareWebServiceConnection)connection;
                    faultConnection.setFaultCode(faultResponse.getFaultCode());
                }

为了绕过这段代码,我需要用自己的handleConnection方法实现来定义类,该方法扩展了类WebServiceMessageReceiveHandlerAdapter

在我的实现中,我排除了身份变更。重要的是在这个类的autowired构造函数中传递WebMessageFactory bean,否则在应用程序启动时会引发异常。

该类必须用Spring原型(例如@Component)标记,并且在配置ServletRegistrationBean时,必须在配置类中配置该bean的名称:

@Bean
    public ServletRegistrationBean<MessageDispatcherServlet> messageDispatcherServlet(ApplicationContext applicationContext){
        MessageDispatcherServlet servlet = new MessageDispatcherServlet();
        servlet.setApplicationContext(applicationContext);
        servlet.setTransformWsdlLocations(true);
        servlet.setMessageFactoryBeanName("webServiceMessageFactory");
        servlet.setMessageReceiverHandlerAdapterBeanName("myOwnMessageReceiverHandlerAdapter");
        return new ServletRegistrationBean<>(servlet,"/ws/*");
    }
 类似资料:
  • 我考虑在项目中使用fluent-http。 所以我尝试注入: 返回正确的字符串,但似乎没有使用状态代码。在这两种情况下,响应都有一个代码HTTP200。 注意:我发现一些状态代码是预先实现的: null

  • 自定义的状态栏覆盖在系统状态栏上,能够在自定义的状态栏中显示文字信息,可以隐藏自定义的状态栏,显示系统状态栏。 作者@贺坤Smaile 说:之前逛街看到移动做推广,有一个定位应用挺好的,合理的利用了状态栏,做了一些消息提醒和隐藏动画,自己回家就做了一个这样的demo,效果很不错,一个多月之前写的,看到有人求,分享出来。 [Code4App.com]

  • 在Spring Boot控制器中,我使用检查用户是否登录(使用基本auth+)。 但是如果用户没有登录,即他们没有经过身份验证,控制器返回。 根据我对身份验证与授权的了解,用于身份验证,而用于授权。 根据我的理解,总是检查用户的授权(顾名思义),但是有什么方法可以根据我们传递给它的参数自定义它,即? 我知道还有另一种解决方案:在中使用基于URL的安全配置,但如果我不想这样做,该怎么办。 有什么想法

  • 我正在处理WebAPI 2中的一个服务,endpoint当前返回一个<code>IHttpActionResult<code>。我想返回一个状态代码,但由于它不在枚举中,我不知道如何发送它,因为所有构造函数都需要一个参数 目前,我正在返回<code>BadResult(消息),但返回<code>422

  • 我试图在我的spring boot应用程序中实现一些自定义异常处理程序,它将能够处理自定义异常并显示批准消息和状态代码。 请帮忙。

  • 主要内容:Maven依赖关系,自定义HTTP头示例HTTP消息可以包含许多描述消息属性的标头,例如内容长度,内容类型,授权等。 HttpClient提供了检索,添加,删除和枚举标头的方法。 在下面的教程中,我们将演示如何将自定义HTTP头添加到HttpClient和Http请求方法。 Maven依赖关系 我们使用maven来管理依赖关系,并使用Apache HttpClient 4.5版本。 将以下依赖项添加到您的项目中。 pom.xml 文件的