Мой REST API должен работает с объектами gRPC в качестве входных параметров.
Самый простой пример:
GET http://localhost:8083/api/books?page.number=1&page.size=30
где прото определение:
message PagedMessage {
Page page = 1;
}
message Page {
int32 number = 1;
int32 size = 2;
}
Контроллер это:
@RequestMapping(value = "/api/books")
public class ObjectOps {
@Autowired
private BooksService booksService;
@GetMapping(value = "/")
@ResponseBody
BooksList listBooks(@RequestParam PagedMessage request) {
return booksService.getBooks(request);
}
}
А в приложении у меня этот боб:
@Bean
ProtobufJsonFormatHttpMessageConverter protobufJsonFormatHttpMessageConverter() {
return new ProtobufJsonFormatHttpMessageConverter();
}
Единственный способ, которым это сработало для меня, - передать информацию о подкачке в виде тела GET:
{
"page" : {
"number": 1,
"size": 30
}
}
но было бы здорово, если бы объект метода списка книг заполнялся из параметров пути запроса.




Я думаю, вы можете просто удалить аннотацию @RequestParam, и Spring заполнит объект.
Ссылка на этот ответ: https://stackoverflow.com/a/16942352/8075423
К сожалению, это работает не для объектов данных gRPC (сообщений), а для простых POJO.