我正在使用Spring框架,并试图创建一个结构,开发人员只能返回org.json.JSONObject实例。我有这个端点声明。
@RequestMapping(path = "/hello", method = RequestMethod.POST)
@ResponseBody
public org.json.JSONObject hello(HttpServletRequest request, HttpServletResponse response) throws IOException这总是返回{"empty":false},因为框架使用的Jackson不知道如何序列化org.json实例。我试图告诉杰克逊如何使用以下依赖项序列化org.json实例。
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-json-org</artifactId>
<version>2.13.0</version>
</dependency>但是,除非我将返回类型更改为Map值,否则无法工作。使用
ObjectMapper mapper = JsonMapper.builder()
.addModule(new JsonOrgModule())
.build()帮不上忙。是否有一个由Spring使用的全局ObjectMapper对象,可以在应用程序启动时注册JsonOrgModule?如何使用Spring框架使用org.json.JSONObject返回类型。
谢谢!
发布于 2022-05-09 15:45:35
根据SpringBootdocs4.3自定义Jackson ObjectMapper部分
com.fasterxml.jackson.databind.Module类型的任何bean都会自动在自动配置的Jackson2ObjectMapperBuilder中注册,并应用于它创建的任何ObjectMapper实例。这提供了在向应用程序添加新功能时提供自定义模块的全局机制。
因此,如果您提供了一个类型为@Bean的JsonOrgModule,它将自动应用于在启动时创建的默认ObjectMapper。
特别代表:
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@Bean
public JsonOrgModule jsonOrgModule() {
return new JsonOrgModule();
}
}
@SpringBootTest
class ObjectMapperTests {
@Autowired
ObjectMapper defaultObjectMapper;
@Test
void defaultObjectMapperShouldWriteJsonObject() throws JSONException, JsonProcessingException {
// Given
var jsonObject = new JSONObject().put("username", "eHayik");
// When
var json = defaultObjectMapper.writeValueAsString(jsonObject);
// Then
assertThat(json).isEqualTo("{\"username\":\"eHayik\"}");
}
}https://stackoverflow.com/questions/72173968
复制相似问题