java - 如何在 REST 请求正文中将缺失值设为空白
问题描述
我的 REST 控制器:
@RestController
@RequestMapping("/api/people")
public class PersonController {
@Autowired
private PersonRepository people;
@Transactional
@RequestMapping(path = "/{personId}", method = RequestMethod.PUT)
public ResponseEntity<?> update(
@PathVariable String personId,
@RequestBody PersonDTO dto) {
// get the entity by ID
Person p = people.findOne(personId); // we assume it exists
// update ONLY entity attributes that have been defined
if(/* dto.getFirstName is defined */)
p.setFirstName = dto.getFirstName;
if(/* dto.getLastName is defined */)
p.setLastName = dto.getLastName;
System.out.println(dto);
return ResponseEntity.ok(p);
}
}
我的人 DTO:
private class PersonDTO {
private String firstName;
private String lastName;
private List<String> designations;
private String location;
/* getters and setters ... */
}
我没有在我通过邮递员发出的 REST 请求中传递值指定,我在本地调试或打印时看到 DTO 中的值,它说指定是“空”但我希望它被视为空白数组列表. 我该怎么做?
解决方案
没有什么能阻止你PersonDto
这样定义你的:
private List<String> designations = new ArrayList<>();
这意味着即使客户端发送 null 您也将反序列化为一个空列表。
推荐阅读
- docker - 如何在 docker 上共享挂载目录的所有权?
- c# - 没有设置器,DataTrigger EnterActions 不起作用?
- hierarchy - 获取父子层次结构
- python-3.x - 为什么在下面示例中的 for 循环中,两个示例中的每个示例中的第二个 for 循环中的结果都不完全相同
- c - 我想要默认参数提升的例子
- javascript - 如何在输出期间更改.js文件变量的背景颜色
- c - fread 和 fwrite 如何区分 C 中的不同数据(类型)?
- android - 使用 LinearLayout 作为 RecyclerView 项的自定义选项菜单
- c++ - 在我的堆排序代码中找不到错误。没有正确执行。C++
- java - 类 ItemToPurchase 中的构造函数 ItemToPurchase 不能应用于给定类型;