【发布时间】:2020-03-14 20:52:54
【问题描述】:
所以,请求的 url 看起来像
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 或类似的东西?
附: 我有一个肮脏的黑客(objectMapper 被注入,所以我可以使用@JsonAttributes), 但是这种情况在数组映射上失败了,与 requestbody 相同的映射工作正常
@GetMapping("/contacts")
public ContactsDTO contacts(@RequestParam Map<String,String> params) {
ContactDTO contactDTO = objectMapper.convertValue(params,ContactDTO.class);
return contactDTO;
}
【问题讨论】:
-
将映射更改为
Post并创建一个QueryDto (for example)并以您想要的方式使用它。恕我直言,使用 json 会更好,并且可以挽救您的生命。 -
你在创建 Rest API 吗?
-
@emotionlessbananas 我知道如何在 POST 中轻松做到这一点,但现在我必须在 GET 中做到这一点
-
@Satheeshkumar No
-
@AritraPaul No.
标签: java spring spring-boot jackson jackson-databind