在发送到页面之前转换字段

Convert fields before sending to the page

我有一个用户 dto class,我需要在将其发送到前端之前转换它的一些属性。

UsedDto class

public class UserDto {
    protected Integer userId;
    protected String userName;
    protected String password;
    protected boolean enabled;
    protected boolean active;
}

现在,从我的控制器

@Override
public ResponseEntity<UserDto> getUser(Integer userId) {
    return new ResponseEntity<>(userService.findById(userId), HttpStatus.OK);
}

我得到这样的数据

{
"userId": 141,
"userName": "admin",
"password": "password",
"enabled": true,
"active": false
}

在我的例子中,在发送数据之前,我应该将布尔值(启用、活动)转换为字符串“Y”或“N”。

{
"userId": 141,
"userName": "admin",
"password": "password",
"enabled": "Y",
"active": "N"
}

我该怎么做?

您可以实现自定义序列化程序。看看这个例子。

public class UserDto {
    protected Integer userId;
    protected String userName;
    protected String password;
    @JsonSerialize(using = BooleanToStringSerializer.class)
    protected boolean enabled;
    @JsonSerialize(using = BooleanToStringSerializer.class)
    protected boolean active;
}

public class BooleanToStringSerializer extends JsonSerializer<Boolean> {

    @Override
    public void serialize(Boolean tmpBool, 
                          JsonGenerator jsonGenerator, 
                          SerializerProvider serializerProvider) 
                          throws IOException, JsonProcessingException {
        jsonGenerator.writeObject(tmpBool ? "Y" : "N");
    }
}