java 如何访问 REST Assured 中的底层 Jackson ObjectMapper?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/25070085/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How do I access the underlying Hymanson ObjectMapper in REST Assured?
提问by Selena
I need to configure the underlying Hymanson ObjectMapper in REST Assured. I am writing REST API tests using REST Assured and I need to define some filters to register with the ObjectMapper that is used to serialize my objects to JSON:
我需要在 REST Assured 中配置底层的 Hymanson ObjectMapper。我正在使用 REST Assured 编写 REST API 测试,我需要定义一些过滤器来注册用于将我的对象序列化为 JSON 的 ObjectMapper:
String newTestSuite = "{\"name\":\"Added through Rest API\",\"description\":\"Test Description\",\"steps\":[]}";
FilterProvider filters = new SimpleFilterProvider().addFilter("createNewTestSuite", new NewTestSuiteFilter());
ObjectMapper om = new ObjectMapper();
om.setFilters(filters);
try {
TestSuite ts = om.readValue(newCaspianTest, TestSuite.class);
RequestSpecification requestSpec = new RequestSpecBuilder()
.setBaseUri("https://somesite.com")
.setBody(ts)
.setUrlEncodingEnabled(false)
.build();
ResponseSpecification responseSpec = new ResponseSpecBuilder()
.expectStatusCode(200)
.expectStatusLine(Matchers.containsString("200 OK"))
.build();
RestAssured.given()
.auth().basic("testUser","testPassword")
.spec(requestSpec)
.log().all()
.post("/restendpoint")
.then()
.log().all()
.spec(responseSpec);
} catch(JsonParseException jpe) {
} catch(JsonMappingException jme) {
} catch(IOException ioe) {
}
}
}
}
回答by sanj
You can try this:
你可以试试这个:
RestAssured.config = RestAssuredConfig.config().objectMapperConfig(new ObjectMapperConfig().Hymanson2ObjectMapperFactory(
new Hymanson2ObjectMapperFactory() {
@Override
public ObjectMapper create(Class aClass, String s) {
FilterProvider filter = new SimpleFilterProvider().addFilter(...);
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setFilters(filter);
return objectMapper;
}
}
));
回答by Jason Henriksen
This will give you an object mapper that does not explode when the back end developer decides to add a new field.
这将为您提供一个对象映射器,当后端开发人员决定添加新字段时,该对象映射器不会爆炸。
RestAssured.config = RestAssuredConfig.config().objectMapperConfig(new ObjectMapperConfig().Hymanson2ObjectMapperFactory(
new Hymanson2ObjectMapperFactory() {
@Override
public ObjectMapper create(Type cls, String charset) {
ObjectMapper om = new ObjectMapper().findAndRegisterModules();
om.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
return om;
}
}
));
回答by Bram
@sanj's answer was very helpful. I had to modify it slightly because I'm using RestAssuredMockMvc.
@sanj 的回答很有帮助。我不得不稍微修改它,因为我使用的是 RestAssuredMockMvc。
This is how I configure RestAssuredMockMvc to use snake_caseinstead of CamelCase:
这就是我如何配置 RestAssuredMockMvc 以使用snake_case而不是CamelCase:
RestAssuredMockMvc.config = RestAssuredMockMvcConfig.config().objectMapperConfig(new ObjectMapperConfig().Hymanson2ObjectMapperFactory(
(type, s) -> {
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE);
return objectMapper;
}
));