3 回答

TA貢獻(xiàn)1831條經(jīng)驗(yàn) 獲得超10個(gè)贊
首先,定義用于映射請(qǐng)求對(duì)象的 POJO:
public class RequestObj implements Serializable{
private List<Long> ids;
private UsuarioDTO user;
/* getters and setters here */
}
public class UsuarioDTO implements Serializable{
private String name;
private String email;
/* getters and setters here */
}
然后修改您的端點(diǎn):
@PostMapping(value = "/sendToOficial")
public ResponseEntity<?> sendToOficial(@RequestBody RequestObj payload) {
通過(guò)這種方式,您也不需要使用ObjectMapper. 就打電話(huà)payload.getIds()。
還要考慮這樣,如果有效負(fù)載發(fā)生變化,您只需要更改RequestObj定義,而使用ObjectMapper會(huì)強(qiáng)制您以一種重要的方式更新端點(diǎn)。將有效載荷表示與控制邏輯分開(kāi)會(huì)更好也更安全。

TA貢獻(xiàn)1936條經(jīng)驗(yàn) 獲得超7個(gè)贊
在jackson-databind-2.6.x及更高版本中,您可以使用配置功能ObjectMapper將低類(lèi)型int值(適合 32 位的long值)配置為序列化值DeserializationFeature#USE_LONG_FOR_INTS:
@PostMapping(value = "/sendToOficial")
public ResponseEntity<?> sendToOficial(@RequestBody Map<String, Object> payload) {
ObjectMapper mapper = new ObjectMapper().configure(DeserializationFeature .USE_LONG_FOR_INTS, true);
List<Long> pointsIds = mapper.convertValue( payload.get("pointsIds"), List.class );
UsuarioDTO autorAlteracao = mapper.convertValue(payload.get("user"), UsuarioDTO.class);
for (Long idPoint : pointsIds) { // ... }
}

TA貢獻(xiàn)1799條經(jīng)驗(yàn) 獲得超6個(gè)贊
如果您只想讓映射器讀入List<Long>,請(qǐng)使用此技巧通過(guò)子類(lèi)化獲取完整的泛型類(lèi)型信息。
例子
ObjectMapper mapper = new ObjectMapper();
List<Long>listOfLong=mapper.readValue("[ 123421, 15643, 51243]" ,
new TypeReference<List<Long>>() {
});
System.out.println(listOfLong);
印刷
[123421, 15643, 51243]
添加回答
舉報(bào)