下一个示例工作正常:
@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对其进行修复?
答案 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编组的演示