如何获取与发送到我的API完全相同的JSON请求主体?

时间:2018-10-17 21:55:42

标签: java jackson

我正在将Spring Boot与Jackson一起使用,并且正在进行事务记录。我试图捕获发送给我的请求正文与发送时的完全相同。我将对象转换为JSON的方式如下:

import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;

@Autowired
private Jackson2ObjectMapperBuilder objectMapperBuilder;
// I have a Bean for my Jackson config in the application setup class 
// and am using this class to ensure consistency between my logs and the output

public String objectToJson(){

     ObjectMapper mapper = objectMapperBuilder.build();
     return mapper.writeValueAsString(requestBody);
}

这在大多数情况下都有效。这只是我在使用JsonProperty的类上的一个问题,例如:

import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.annotations.ApiModelProperty;

public class UserDTO {

     // Input Fields

     @JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
     private String username;

     @JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
     private String password;


      // Output Fields

      @ApiModelProperty(hidden = true)
      @JsonProperty(access = JsonProperty.Access.READ_ONLY)
      private LocalDateTime createdDate;

      @ApiModelProperty(hidden = true)
      @JsonProperty(access = JsonProperty.Access.READ_ONLY)
      private LocalDateTime updatedDate;
 }

问题在于它正在完全按照配置进行操作。我需要在使用我指定的Write修饰符的同时将Object Request Body转换为JSON格式,因为这就是它进入我的代码的方式。

无论如何,我是否可以反转映射逻辑来满足此要求?

 // @RequestBody -> Mapper Convert (Using Write Rules) -> String JSON

试图澄清

如上所述,当在类型为 UserDTO 的@RequestBody上使用上面的 objectToJson 方法时,我看到的输出如下:

 {
 "createdDate": "2018-11-06 00:00:00",
 "updatedDate": "2018-11-06 00:00:00"
 }

当我希望输出包括整个对象时,包括WRITE_ONLY字段,例如:

 {
 "username": "myUserName9",
 "password": "securepassword123",
 "createdDate": "2018-11-06 00:00:00",
 "updatedDate": "2018-11-06 00:00:00"
 }

有可能吗?

0 个答案:

没有答案