问题标签 [spring-web]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1406 浏览

resttemplate - RestTemplate 为 getForEntity 调用返回 null

这将返回状态 200,

和 http 标头:

但是身体是空的。

我的包装看起来像这样:

如果我使用其中任何一个,我可以“看到”数据:

我有消息转换器:

我所有的 RestTemplate 调用都会发生这种情况,我无法弄清楚为什么它在不同的环境中使用类似的代码。

我的 REST 响应如下所示:

0 投票
1 回答
794 浏览

java - @ExceptionHandler 未被调用测试

我一直在兜圈子试图修复一个测试,但 SO 或其他在线资源上没有提供解决方案。我有这种@ControllerAdvice方法来处理MyException异常,即:

我有一个控制器:

由以下人员测试:

我对其他测试有类似的设置,但这些似乎都通过了。但是对于这个我得到:Failed to invoke @ExceptionHandler method: public org.springframework.http.HttpEntity<mypackage.ErrorDetail>但是我知道它被调用了,因为当我逐步调用它并且日志显示它已被检测到(Detected @ExceptionHandler methods in MyControllerAdvice)。

我的想法是,这是因为 HttpMessageConverters 未正确解析,并尝试使用 ModelAndView 方法而不是所需的 JSON 格式来解析输出。我无法通过使用standaloneSetupMockMvc (配置有 ControllerAdvice 和 HttpMessageConverters 集)或使用所需类型的 HttpMessageConverters bean 来强制执行此操作。

我正在使用弹簧依赖项:

我究竟做错了什么?

0 投票
1 回答
62 浏览

spring - 公共端点的 Spring Security 意外行为

我有一个 Spring HttpSecurity 配置为

客户端为“/public/**”端点设置授权标头可能是愚蠢的。

但是,我注意到 Spring Security 尝试进行身份验证尝试为公共请求创建经过身份验证的会话,因为提供了授权标头。

HttpSecurity 配置不应该覆盖此行为吗?

0 投票
1 回答
845 浏览

json - Spring rest controller result wrapping with JsonView / MappingJacksonValue

I have a Spring API that allows the user to specify the JsonView of each call using a view param like so:

I then use Spring's MappingJacksonValue to set the correct view dynamically instead of using @JsonView() annotation and finally I just return the MappingJacksonValue instance which produces something along the lines of

I can't for the life of me figure out how to easily wrap my MappingJacksonValue instances in an ObjectNode so that I can change all API results from the snippet above to this

I tried using a regular HashMap<> but that didn't work - the serialization completely ignores the MappingJacksonValue view and it also produces Map-specific results

So can someone pls let me know what's the best way to achieve result wrapping in my scenario?

Thanks in advance!

0 投票
0 回答
97 浏览

struts2 - struts2-spring-plugin 与 Spring 会话范围 bean

我有带有struts2 MVC和spring DI的web RestClient,并在登录后使用struts2-spring-plugin将Authenticated RestClient bean注入会话范围内的struts2 Actions。如果我在 web.xml 中有 struts2-spring-plugin 需要的 ContextLoaderListener

没有会话范围(我的 IDE 标记会话为红色),只有原型和单例可用:

如果我在 web.xml RequestContextListener 会话范围出现

但是这个异常出现了完整的堆栈跟踪

IllegalStateException:未找到线程绑定请求:您是指实际 Web 请求之外的请求属性,还是在原始接收线程之外处理请求?

我知道如果我切换到 spring MVC 则不存在这个问题,但是我可以在会话范围内使用 spring bean 与 struts2 框架,还是 struts2 有任何替代方案?

0 投票
7 回答
70915 浏览

java - Spring RestTemplate 和泛型 ParameterizedTypeReference 集合,如 List

抽象控制器类需要来自 REST 的对象列表。在使用 Spring RestTemplate 时,它​​没有将其映射到所需的类,而是返回 Linked HashMAp

如果我使用,

它工作正常。但不能放入所有子类,任何其他解决方案。

0 投票
1 回答
338 浏览

java - Spring MVC Maven Jar Hell:“ExtendedMappingJacksonJsonView”类型的层次结构不一致

我已尽我所能修复此错误,在我的 pom 文件中添加了一些排除项,但仍然无法弄清楚为什么会出现此错误。

pom.xml

我收到此错误的代码

编辑:依赖树输出

编辑2:忘了提一件重要的事情。我们没有使用 Maven 仓库,而是我们自己的私有仓库。我已经下载了所有 jar 并导入到我们的仓库中。我反复跑来mvn clean -U install查看是否有任何错误并修复它。

感谢所有回答的人。由于我必须尽快完成工作,所以我决定使用 Spring WS 而不是 JAX-RS!我们已经有工作的 Spring REST WS,因此决定进一步使用它。如果我的组织放弃使用私人回购的想法,我永远不会陷入这种混乱。

0 投票
2 回答
1083 浏览

spring - 带有嵌入式 Tomcat 的 Spring WebApplicationInitializer (ServletContainerInitializer, @HandlesTypes)

我不明白为什么在下面的最小项目中我WebApplicationInitializer在 Eclipse 和 IntelliJ 中运行测试时发现了 Spring 接口的实现,但在使用 Maven ( mvn clean test) 时却没有。

使用 Eclipse 和 IntellIJ 我看到了INFO: Spring WebApplicationInitializers detected on classpath: [com.example.pack.DummyInitializer@26d678a4]

随着mvn clean test我看到INFO: No Spring WebApplicationInitializer types detected on classpath

在测试中,我启动了一个嵌入式 Tomcat:

web.xml引用了一个实现,ServletContextListener它创建了一个新的(和空的)AnnotationConfigWebApplicationContext

我将示例项目上传到 GitHub:https ://github.com/C-Otto/webapplicationinitializer

0 投票
0 回答
624 浏览

jetty - 使用 WebApplicationInitializer 启动嵌入式 Jetty

我正在创建要部署到 Fuse 6.2.1 的 Restful (Jax-RS) 服务。(使用 Apache CFX,并使用 OSGi 包部署到 Karaf)服务器仅支持 Spring 3.2.12.RELEASE。我正在尝试使用几乎为零的 XML 配置来做所有事情。

到目前为止一切顺利,一切正常,我可以部署和运行我的服务。

但是,我希望能够在本地测试我的服务而无需部署它们。所以我希望能够启动一个网络服务器并注册我的 servlet,但不能完全弄清楚我们的方式。

我正在用这个配置 servlet(使用 Spring 的 WebApplicationInitializer 而不是 web.xml):

}

我的主要 Spring 配置如下所示:

所以为了清楚起见,上面的代码是我当前的、工作的、可部署的配置。所以现在我想创建一个使用相同但也启动 Jetty 并注册我的 servlet 的测试配置,但不能完全弄清楚如何。有什么帮助吗?谢谢!


编辑:原来我根本不需要 WebApplicationInitializer 来让它工作。我最终为 Spring 创建了一个测试配置,它将一个 Jetty 服务器定义为一个 bean。似乎工作:

0 投票
1 回答
2927 浏览

rest - 在 Spring 数据中,可以通过 POST /parent/{parentId}/nested 将嵌套的 @OneToMany 对象添加到父级?

我有父对象和嵌套对象。我可以获得嵌套列表,使用GET /parent/{parentId}/nested但我不能成功发布/放置它。在 POST 结果中,我得到 HTTP 204,并且父对象有空的嵌套对象列表。

在日志中,我看到 Hibernate 没有在 DB 中插入任何内容。在调试期间,我看到用于反现实化的 Jackson Object Mapper 将“ org.springframework.hateoas.Resources<java.lang.Object>”作为 JavaType。

这是我的 POST 的真实示例: curl 'http://localhost:8000/api/users/402880e554b8f7960154b8f7adbc0000/orders/' -i -X POST -H 'Authorization: Basic OLOLO==' -H 'Accept: application/json' -H 'deviceCurrencyCode: USD' -H 'Content-Type: application/json; charset=UTF-8' -d '{"orderPrice": 0,"tax": 0,"shippingCost": 0,"credits": 0,"addresses": [{"firstName": "Figli","lastName": "Migli","zipCode": "5555","city": "Riga","country": "Tlmltr","phone": "7777","address": "Adddr"}],"status": "status"}'

我知道这是可能的POST /nested '{"parent":"/link/to/parent"}'。但是,如果这是通过父对象获取嵌套对象的方法,为什么我不能以这种方式发布/放置/修补它们?我检查了,它是 RESTfull 的,而且似乎是。