将所有请求参数映射到Spring Controller中的对象中

问题描述 投票:0回答:1

因此,请求的网址看起来像

localhost:8080/contacts?id=22&name=John&eventId=11

而且我还有一个对象可以将请求映射到

public class ContactDTO {
    private Long id;
    private String name;
    private Long eventId;
}

我使用控制器方法,例如将请求参数传递给对象

@GetMapping("/contacts")
public ContactDTO contacts(ContactDTO contact) {
    // everything is awesome! contact maps clearly
    return contact;
}

问题是如何像这样映射但名称不同

    localhost:8080/contacts?id=22&name=John&event_id=11

设置@JsonAttribute无效,因为Jackson映射器仅在requestbody中起作用。也许我应该编写自定义HandlerMethodArgumentResolver或类似的东西?

P.S。我有一个肮脏的技巧(注入了objectMapper,所以我可以使用@JsonAttributes),但是这种情况在数组映射上失败,与requestbody的相同映射可以正常工作

@GetMapping("/contacts")
public ContactsDTO contacts(@RequestParam Map<String,String> params) {
    ContactDTO contactDTO = objectMapper.convertValue(params,ContactDTO.class);
    return contactDTO;
}
java spring spring-boot jackson jackson-databind
1个回答
0
投票

使用@requestparam的@RequestBody insteaf。

© www.soinside.com 2019 - 2024. All rights reserved.