Spring启动,在序列化之前输出json http requestbody
当收到http请求时,Spring boot将执行以下步骤 1.首先读取json http requestbody 2.然后将其反序列化为@RequestBody对象 //Json数据映射器 ObjectMapper mapper=新的ObjectMapper() mapper.writeValueAsString(请求) 我可以使用ObjectMapper输出json正文,但如果我可以在json正文反序列化为object之前直接输出json正文,那么效果会更好 在spring boot将json请求正文反序列化为object之前,是否可以输出json请求正文?而不是使用以下方法:Spring启动,在序列化之前输出json http requestbody,json,spring,spring-boot,httprequest,Json,Spring,Spring Boot,Httprequest,当收到http请求时,Spring boot将执行以下步骤 1.首先读取json http requestbody 2.然后将其反序列化为@RequestBody对象 //Json数据映射器 ObjectMapper mapper=新的ObjectMapper() mapper.writeValueAsString(请求) 我可以使用ObjectMapper输出json正文,但如果我可以在json正文反序列化为object之前直接输出json正文,那么效果会更好 在spring boot将jso
@RequestMapping("/...")
public Bar findBar(@RequestBody Foo foo) {
// ...
}
您可以这样做:
@RequestMapping("/...")
public Bar findBar(Reader reader) {
String json = reader.read..( );
Foo foo = objectMapper.read( ... );
}
但我认为没有办法同时获得反序列化对象和原始响应。但是我可能错了。如果您想将JSON作为字符串对象
@RequestMapping("/...")
public Bar findBar(@RequestBody("json") String json) {
// ...
}
上面的代码片段将为您提供JSON字符串作为输出。现在,如果您想将其转换为对象,则可以使用
ObjectMapper mapper = new ObjectMapper();
我正在使用
@Valid
检查请求参数。非常感谢。但是我想在日志中输出原始请求主体,并使用@RequestBody。有可能吗?@Yuu正如我提到的,我不认为有办法两者兼得。要么获取对象然后序列化,要么获取原始请求并反序列化。@Yuu不客气。如果您觉得答案解决了您的问题,您可以使用旁边的勾号接受答案。非常感谢,我可以输出原始请求输出。但是如果我使用您重新命名的方式,@Valid注释似乎不起作用。我已经添加了一些代码。谢谢您的确认。这不再有效,因为Spring说找不到符号值
您使用的是错误的@valid方法。您需要使用@@validc定义用户定义的对象您可以给我一个示例,我应该将@valid放在哪里?如果您希望输出为JSON数据,则需要使用objectmapper或GSON库。是的,我可以按照您的方法输出JSON,但我现在不能使用@valid…您必须提到有效的注释和RequestBody Foo Foo,之后,您需要使用objectmapper或GSON库手动将foo对象转换为json。
@RequestMapping(value = "/...", method = RequestMethod.POST)
public Bar getBar(@Valid @RequestBody String jsonBody){
System.out.println("data:" + jsonBody);
}
public class BarRequestEntity{
// AuthenticationKey
@NotBlank(message = "id {error.empty}")
private String id;
}