gpt4 book ai didi

grails - Spring Boot 1.3 WebSocket JSON转换器产生无效的JSON

转载 作者:行者123 更新时间:2023-12-02 15:21:29 28 4
gpt4 key购买 nike

升级到Spring Boot 1.3(通过Grails 3.1)后,JSON输出呈现不正确。我相信是因为new auto-configured WebSocket JSON converter

例如,对于Spring Boot的早期版本(通过Grails 3.0),请使用以下代码:

@MessageMapping("/chat")
@SendTo("/sub/chat")
protected String chatMessage() {
def builder = new groovy.json.JsonBuilder()
builder {
type("message")
text("foobar")
}
builder.toString()
}

这将产生:
{"type": "message", "text": "foobar"}

使用Spring Boot 1.3(通过Grails 3.1)时,该Web套接字会产生以下内容:
"{\"type\":\"message\",\"text\":\"foobar\"}"

这是无效的JSON。如何摆脱这种新行为,使其像以前一样呈现JSON?如果您有任何建议,请告诉我。

我尝试覆盖新的 configureMessageConverters方法,但没有任何效果。

最佳答案

看起来你是对的。引用的提交显示可疑的自动配置imho。

特别是在过去的b / c中,转换器的顺序被有意地更改为StringMessageConverter优先于MappingJackson2MessageConverter:https://github.com/spring-projects/spring-framework/commit/670c216d3838807fef46cd28cc82165f9abaeb45

现在,您可以禁用该自动配置:

@EnableAutoConfiguration(exclude = [WebSocketMessagingAutoConfiguration])
class Application extends GrailsAutoConfiguration { ... }

或者,在已配置的转换器的顶部添加另一个 StringMessageConverter(也许是因为您确实想要启动自动配置行为,因为它使用的是jackson ObjectMapper bean而不是创建新的Bean):
@Configuration
@EnableWebSocketMessageBroker
class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {

@Override
boolean configureMessageConverters(List<MessageConverter> messageConverters) {
messageConverters.add 0, new StringMessageConverter()
return true
}

...

}

希望能有所帮助。

关于grails - Spring Boot 1.3 WebSocket JSON转换器产生无效的JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35318454/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com