the*_*mer 2 java spring pojo gson
我正在使用Spring Boot,我在我的控制器中有一个这样定义的方法
@PostMapping("/update)
public void update(@RequestBody User user) {
...
}
Run Code Online (Sandbox Code Playgroud)
但是在我的客户请求(例如前端或邮递员)中,我有这样的事情:
{
"firstName" : "John",
"lastName" : "Doe",
"id" : 1234,
"metaInfoId" : "5457sdg26sg4636"
}
Run Code Online (Sandbox Code Playgroud)
事情是我的用户pojo只有firstName,id并且lastName实例字段在其中.但是在我的请求中我have to send metaInfoId也有其他一些需求.那么如何在上面的控制器方法中检索或分离metaInfoId和User建模呢?
我是否必须创建另一个调用的模型类UserModelRequest并将所有User字段与字段一起添加metaInfoId然后使用@RequestBody?有没有办法简单地metaInfoId从请求中删除,然后采取其他一切并将其转储到Userpojo?例如,您可以在nodejs中轻松完成此操作(只需拼接您的对象并获取所需内容).
那么有没有办法在java spring中完成它而不必创建另一个模型类?
您可以注释您的POJO,@JsonIgnoreProperties(ignoreUnknown = true)以便忽略它不包含的字段.防爆
@JsonIgnoreProperties(ignoreUnknown = true)
public class User {
private int id;
private String firstName;
private String lastName;
... getters & setters ...
}
Run Code Online (Sandbox Code Playgroud)
此外,您不应在休息请求的正文中包含元数据.这些信息的正确位置将在标题中.这会将您的方法签名更改为:
@PostMapping("/update)
public void update(@RequestBody User user, @RequestHeader(value="metaInfoId") String metaInfoId) {
...
}
Run Code Online (Sandbox Code Playgroud)
如果您必须在请求中添加信息,那么您需要更新User pojo类以包含此字段(或者让它使用metaInfoId字段扩展类)
最后,您真的不想创建新类型.您可以更改签名以接受地图并检索必要的信息,如:
@PostMapping("/update)
public void update(@RequestBody Map<String, Object> userMap) {
String metaInfoId = userMap.get("metaInfoId");
ObjectMapper mapper = new ObjectMapper(); // jackson's objectmapper
final User user = mapper.convertValue(userMap, User.class);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1847 次 |
| 最近记录: |