gpt4 book ai didi

spring-boot - 强制 Spring Boot 使用 Gson 或 Jackson

转载 作者:行者123 更新时间:2023-12-05 01:34:05 26 4
gpt4 key购买 nike

我试图强制 SpringBoot 使用 Gson 而不是 Jackson。我已经阅读了我在网上找到的大部分文章,但我仍然看到有人在使用 Jackson。这是我所做的

  1. 已添加
spring:
http: { converters: { preferred-json-mapper: gson } }
mvc: { converters: {preferred-json-mapper: gson } }

在 application.yaml 中

  1. 更新 POM
    • 添加了gson依赖
    • jackson-databind 添加到 spring-boot-starter-web 依赖项的排除列表中。
  2. 添加了 @EnableAutoConfiguration(exclude = JacksonAutoConfiguration.class) 到主类。
  3. 写在@Configuration类下面:
@Configuration
@Slf4j
public class MyConfig implements WebMvcConfigurer {

@Override
public void extendMessageConverters (List<HttpMessageConverters<?>> converters) {
log.debug("Setting gson converter");
converters.add(new GsonHttpMessageConverter(myCustomGsonInstance()));
}

public Gson myCustomGsonInstance() {
return new Gson();
}
}

在调试中运行测试时,我可以看到 Jackson 仍然列在 HttpMessageConverters 列表中,而 Gson 没有。


更新:在实时运行和下面的测试类中可以看到这种行为。

@AutoConfigureMockMvc
@SpringBootTest(webEnvironment = MOCK)
@ExtendWith(MockitoExtension.class)
public class MyTestClass {

@Autowired
private MyController controller;

private MockMvc mockMvc;

@BeforeEach
public void setUp(){
mockMvc = MockMvcBuilders.standaloneSetup(controller)
// .setMessageConverters(new GsonHttpMessageConverter(myCustomGsonInstance())) // if I add this, the test passes.
.build();
}

@Test
public void happyFlow(){
// given
URI uri = "/test/uri";
HttpHeaders headers = new HttpHeaders();
headers.set(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON_VALUE);

// when
String responseBody = mockMvc.perform(get(uri).headers(headers)).andReturn().getResponse().getContentAsString();

// then
assertThat(responseBody, wasSerializedByGson());
}
}

最佳答案

看起来您在配置首选 JSON 映射器时使用了错误的属性。您正在使用 spring.http.converters.preferred-json-mapper 但正确的属性是 spring.mvc.converters.preferred-json-mapper .在 application.yaml 中,将是以下内容:

spring:
mvc:
converters:
preferred-json-mapper: gson

关于spring-boot - 强制 Spring Boot 使用 Gson 或 Jackson,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64050458/

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