如何知道该字段未通过



下面是一个示例DTO

@Getter
@Setter
public class TestDto {
private Long id;
private String name;
private String sex;
}

假设我将这个对象存储在服务器上:{"id":1, "name": "alex", "sex": "M"}

如何发送一个只更新"名称"的请求?物体的一部分?

也许我可以发送这个:{"id":1, "name":"adam"}

使得对象变成如下:{"id":1, "name": "adam", "sex": "M"}

我还需要能够将字段设置为null(即清除字段的内容)。

在这种情况下,我想发送{"id":1, "name":"adam", "sex":null}

将存储的DTO更改为{"id":1, "name": "adam", "sex":null}

我如何使用java, spring boot等来做到这一点?

我知道如何使用:

@PutMapping
public TestDto update(Map<String, Object>map){ ... }

,但我也需要一些验证,如果我通过{"id":"1AA" ... }我得到一个序列化异常。

p。找到这个魔法的第一步->1.在路径TestDto抛出Rest之前-需要像这样清除类型

Object body = testDto;

if将帮助你得到一个对象的字段,你想在服务器上,然后你将能够检测字段列表更新

不尝试检测缺席值和空值,考虑定义一个update对象,其中包含要更新的字段列表。

这样的对象可能像这样:

@Getter
@Setter
public class UpdateObject
{
private long id; // ID of the object to be updated.
private TestDto updates; // an object that contains the new values for the fields.
private List<String> updateFields; // a list of fields to be updated.
}

这里是一些Json

{
"id": 1,
"updates":
{
"name": "blem",
"sex": null
},
"updateFields": ["name", "sex"]
}

如果我理解对了,你只是用不同的字段向服务器发送请求。使用@ModelAttribute注释,您可以以json格式发送您的正文。如果你只发送一个/两个字段或者你想要的{"id":1, "name":"adam"},由于spring数据jpa,你可以在数据库中更新你的模型。(在这种情况下,你的字段sex将是空的,你需要创建一些操作来检查它的Mapstruct -转换你的dto在其他模型加上检查空/非空字段)。如果您想保存非M和非FM值,最好为sex字段创建默认值。这是一个坏习惯,将来会成为你的坏笑话。

@Getter
公共Enum性别{私人男,私人女,私人违约}

好了,伙计们终于知道该怎么做了

1。客户端->将testDto路径为Object,而不是testDto .class

Object payLoad = testDto;
template.postForObject("url", payload);

2。服务器端->

@RestController
@RequestMapping("/test")
public class TestController {
private final Map<Long, TestDto> cash = new HashMap<>();
private final ObjectMapper mapper = new ObjectMapper();
@PostMapping
public TestDto create(@RequestBody TestDto dto) {
return cash.computeIfAbsent(dto.getId(), v -> dto);
}
@PutMapping("/{id}")
public TestDto update(@PathVariable Long id, @RequestBody String json) throws JsonProcessingException {
val oldValue = cash.get(id);
mapper.readerForUpdating(oldValue).readValue(json);
return cash.put(oldValue.getId(), oldValue);
}
}

这个提示让您只更新客户端真正更改的字段

相关内容

最新更新