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

对于mockmvc如何使用Gson而不是Jackson?

姜经武
2023-03-14

我花了过去的一天,试图找到一个解决办法,但没有找到任何在线资源,解决了这个问题。

我使用Gson为我的应用程序进行消息转换,它在单元测试之外工作得很好。我甚至添加了HttpMessageConvertersbean以优先于Jackson而不是将配置值写入application.yml。这只在运行应用程序时起作用。

现在我的问题是,如何使用mockmvc的Gson序列化/反序列化?我有一个带有@serializedname(“field_one”)批注的类,它的值与实际名称不同。我最接近找到答案的是下面的一个,但没有任何帮助:

https://stackoverflow.com/A/20510028/3948882

如何替换objectmapper或者让mockmvc使用Gson而不是Jackson?

编辑:添加更多的上下文:

当我试图发送一个通过Gson转换为Json的model时,它立即被拒绝(400),因为我对模型中的每个字段都有@NotNull注释。当它在控制器中反序列化时,它将字段设置为NULL。下面的示例有@valid,它确保model签出。

@RequestMapping(value = "accept", method = RequestMethod.POST)
public Model resp(@Valid @RequestBody Model model){
    return model;
}

另一方面,当我在没有@valid的情况下访问一个endpoint,传递一个令Jackson高兴的json,并且返回a模型时,我无法检查任何字段:

mockMvc.perform(
    post("/test/accept")
        .contentType(MediaType.APPLICATION_JSON)
        .content(json))
    .andExpect(jsonPath("$.field_one", is("Hello world!")))

例外情况:

java.lang.AssertionError: No value at JSON path "$.field_one", exception: No results for path: $['field_one']

共有1个答案

令狐嘉运
2023-03-14

您必须正确设置mockmvc:

MockMvc mvc = MockMvcBuilders.standaloneSetup(new YourController())
                             .setControllerAdvice(new SomeExceptionHandler())
                             .setMessageConverters(new GsonHttpMessageConverter()) //<-- THIS
                             .build();
 类似资料:
  • 我试图使用Gson发送JsonObjects作为响应。这些JsonObjects是手工构造的,而不是使用objectMapper或GSON。我排除了所有与杰克逊有关的依赖关系。它工作得很好很好。后来,我尝试使用SpringFox添加Swagger文档。现在它抛出以下异常:

  • 我正在用Spring(无Spring Boot)构建一个Java客户端,并且必须使用Gson。 我如何告诉Spring使用Gson而不是Jackson? 为了澄清,我使用了反应式WebClient: Pojo应该是这样的: 服务器中的Json是这样的:

  • Spring Boot 1.4.2参考声明: Springhttp。转换器。首选json映射器=jackson#用于HTTP消息转换的首选json映射器。设置为“gson”以强制使用gson 我们做到了。 我们为首选json映射器设置了gson 但杰克逊还是被利用了。 最后,在排除了Maven中所有向Jackson指出的可传递依赖项之后,我们设法强制Spring Boot使用Gson。 现在的问题

  • 我在一个项目中工作,我想用Swagger来记录它。是一个用Spring Boot实现的项目,我们使用库“com.google.code.Gson”而不是默认的SpringBoot“Jackson”,但是用Gson Swagger不起作用。 杰克逊返回如下: 有人知道我怎么才能让Gson工作吗?

  • 我想在spring boot应用程序中使用像Genson这样的JSON处理器。 当您使用或时,由于这两个库的Spring引导自动配置,您非常舒适。 在这个链接中,有一个很好的指南,可以将替换为。 为了解决我的问题,我创建了和bean但是我应该怎么做才能将这行添加到我的配置中呢? 我需要做除上述之外的任何事情来用库替换吗?

  • 问题内容: 我想做的是从而不是从Volley库中使用一些数据。 以下是用于从服务器中获取JSON对象的代码。 我试图改变到后改为。但这并没有解决。 问题答案: 中的url 不是可选的,并且JSONObject参数用于将带有请求的参数发布到url。 从文档中:http : //afzaln.com/volley/com/android/volley/toolbox/JsonObjectRequest