春季框架:@RequestBody中的UUID

时间:2019-02-28 08:49:48

标签: java spring

下一个示例工作正常:

@PostMapping("/test/{id}")
public ResponseEntity test(@PathVariable UUID id)
{
    System.out.println(id);
    return ResponseEntity.ok().build();
}

但是当我尝试在RequestBody中使用UUID

@PostMapping("/test")
public ResponseEntity test(@RequestBody TestDTO testDTO)
{
    System.out.println(testDTO.id);
    return ResponseEntity.ok().build();
}

然后我在控制台中看到null

id字段具有UUID类型

public class TestDTO {
    UUID id;
}

如果将UUID替换为String,则代码可以正常工作。

我的请求看起来像这样

curl -XPOST -H "Content-Type: application/json" -d '{"id": "00000000-0000-0000-0000-000000000000"}' localhost:8080/test/test

如何使用UUID对其进行修复?

2 个答案:

答案 0 :(得分:1)

@JsonDeserialize注释的字段可以正常工作:

import com.fasterxml.jackson.databind.annotation.JsonDeserialize;

import java.util.UUID;

public class TestDTO {
    @JsonDeserialize
    UUID id;
}

UPD:

此解决方案也可以在没有注释的情况下使用:

public class TestDTO {

    private UUID id;

    public UUID getId() {
        return id;
    }

    public void setId(UUID id) {
        this.id = id;
    }
}

答案 1 :(得分:1)

如果您添加id属性的getter / setter,那么您将获得它的值。

here我发现了一个很好的关于JSON编组的演示