@Serdeable
public record FilterSortRequest(@JsonProperty("filters")List filters, @JsonProperty("sorts")Map sorts) {
}
Контроллер микронавта
@Controller("/tag")
@Version("1")
@Tag(name = "Tag")
public class TagController implements IHttpAction {
public TagController(IServiceAction iServiceAction) {
this.iServiceAction = iServiceAction;
}
@Override
public HttpResponse find(@QueryValue FilterSortRequest searchCriteria) {
var result = this.iServiceAction.find(searchCriteria);
return Result.match(()-> HttpResponse.ok(result.value), ()->HttpResponse.notFound(result.exception.getMessage()));
}
}
Http-клиент
@Validated
@ExecuteOn(TaskExecutors.BLOCKING)
public interface IHttpAction {
@Get(value = "/{?searchCriteria*}")
HttpResponse find(@QueryValue FilterSortRequest searchCriteria);
@Get(uri = "/{id}")
HttpResponse get(@PathVariable(name = "id") @Nonnull UUID id);
@Post
HttpResponse post(@Body T request);
@Put(uri = "/{id}")
HttpResponse put(@PathVariable(name = "id") @NotNull UUID id, @Body T request);
@Delete(uri = "/{id}")
HttpResponse delete(@PathVariable(name = "id") @NotNull UUID id);
}
Зарегистрируйте подшивку как
@Singleton
public class FilterSortRequestBinder implements TypedRequestArgumentBinder {
private final ObjectMapper objectMapper;
public FilterSortRequestBinder(ObjectMapper objectMapper) {
this.objectMapper = objectMapper;
}
@Override
public Argument argumentType() {
return Argument.of(FilterSortRequest.class);
}
@Override
public BindingResult bind(ArgumentConversionContext context, HttpRequest source) {
try {
// Extract the 'filters' parameter
String filtersParam = source.getParameters().get("filters");
// Extract the 'sorts' parameter
String sortsParam = source.getParameters().get("sorts");
// Deserialize filters and sorts
List filters = filtersParam != null
? objectMapper.readValue(filtersParam, Argument.listOf(FilterOption.class))
: Collections.emptyList();
Map sorts = sortsParam != null
? objectMapper.readValue(sortsParam, Argument.mapOf(String.class, SortOperators.class))
: Collections.emptyMap();
// Create the FilterSortRequest object
FilterSortRequest filterSortRequest = new FilterSortRequest(filters, sorts);
return () -> Optional.of(filterSortRequest);
} catch (Exception e) {
e.printStackTrace();
return BindingResult.EMPTY;
}
}
}
Выполнение никогда не достигает метода привязки.
Отправка запроса как
http://localhost:8080/tag?filters=[{"field":"string","operator":"EQUAL","values":{"additionalProp1":"string","additionalProp2":"string","additionalProp3":"string"}}]&sorts={"additionalProp1":"ASC","additionalProp2":"ASC","additionalProp3":"ASC"}
400 неверных запросов
{
"_links": {
"self": [
{
"href": "/tag?filters=%5B%7B%22field%22%3A%22string%22%2C%22operator%22%3A%22EQUAL%22%2C%22values%22%3A%7B%22additionalProp1%22%3A%22string%22%2C%22additionalProp2%22%3A%22string%22%2C%22additionalProp3%22%3A%22string%22%7D%7D%5D&sorts=%7B%22additionalProp1%22%3A%22ASC%22%2C%22additionalProp2%22%3A%22ASC%22%2C%22additionalProp3%22%3A%22ASC%22%7D",
"templated": false
}
]
},
"_embedded": {
"errors": [
{
"message": "Failed to convert argument [searchCriteria] for value [null] due to: Unexpected token VALUE_STRING, expected START_OBJECT \n at [Source: UNKNOWN; byte offset: #UNKNOWN]",
"path": "/searchCriteria"
}
]
},
"message": "Bad Request"
}
Подробнее здесь: https://stackoverflow.com/questions/793 ... get-method
400 неверных запросов со сложным объектом POJO в методе получения HTTP Micronaut ⇐ JAVA
Программисты JAVA общаются здесь
1735419183
Anonymous
@Serdeable
public record FilterSortRequest(@JsonProperty("filters")List filters, @JsonProperty("sorts")Map sorts) {
}
[b]Контроллер микронавта[/b]
@Controller("/tag")
@Version("1")
@Tag(name = "Tag")
public class TagController implements IHttpAction {
public TagController(IServiceAction iServiceAction) {
this.iServiceAction = iServiceAction;
}
@Override
public HttpResponse find(@QueryValue FilterSortRequest searchCriteria) {
var result = this.iServiceAction.find(searchCriteria);
return Result.match(()-> HttpResponse.ok(result.value), ()->HttpResponse.notFound(result.exception.getMessage()));
}
}
[b]Http-клиент[/b]
@Validated
@ExecuteOn(TaskExecutors.BLOCKING)
public interface IHttpAction {
@Get(value = "/{?searchCriteria*}")
HttpResponse find(@QueryValue FilterSortRequest searchCriteria);
@Get(uri = "/{id}")
HttpResponse get(@PathVariable(name = "id") @Nonnull UUID id);
@Post
HttpResponse post(@Body T request);
@Put(uri = "/{id}")
HttpResponse put(@PathVariable(name = "id") @NotNull UUID id, @Body T request);
@Delete(uri = "/{id}")
HttpResponse delete(@PathVariable(name = "id") @NotNull UUID id);
}
Зарегистрируйте подшивку как
@Singleton
public class FilterSortRequestBinder implements TypedRequestArgumentBinder {
private final ObjectMapper objectMapper;
public FilterSortRequestBinder(ObjectMapper objectMapper) {
this.objectMapper = objectMapper;
}
@Override
public Argument argumentType() {
return Argument.of(FilterSortRequest.class);
}
@Override
public BindingResult bind(ArgumentConversionContext context, HttpRequest source) {
try {
// Extract the 'filters' parameter
String filtersParam = source.getParameters().get("filters");
// Extract the 'sorts' parameter
String sortsParam = source.getParameters().get("sorts");
// Deserialize filters and sorts
List filters = filtersParam != null
? objectMapper.readValue(filtersParam, Argument.listOf(FilterOption.class))
: Collections.emptyList();
Map sorts = sortsParam != null
? objectMapper.readValue(sortsParam, Argument.mapOf(String.class, SortOperators.class))
: Collections.emptyMap();
// Create the FilterSortRequest object
FilterSortRequest filterSortRequest = new FilterSortRequest(filters, sorts);
return () -> Optional.of(filterSortRequest);
} catch (Exception e) {
e.printStackTrace();
return BindingResult.EMPTY;
}
}
}
Выполнение никогда не достигает метода привязки.
[b]Отправка запроса как[/b]
http://localhost:8080/tag?filters=[{"field":"string","operator":"EQUAL","values":{"additionalProp1":"string","additionalProp2":"string","additionalProp3":"string"}}]&sorts={"additionalProp1":"ASC","additionalProp2":"ASC","additionalProp3":"ASC"}
[b]400 неверных запросов[/b]
{
"_links": {
"self": [
{
"href": "/tag?filters=%5B%7B%22field%22%3A%22string%22%2C%22operator%22%3A%22EQUAL%22%2C%22values%22%3A%7B%22additionalProp1%22%3A%22string%22%2C%22additionalProp2%22%3A%22string%22%2C%22additionalProp3%22%3A%22string%22%7D%7D%5D&sorts=%7B%22additionalProp1%22%3A%22ASC%22%2C%22additionalProp2%22%3A%22ASC%22%2C%22additionalProp3%22%3A%22ASC%22%7D",
"templated": false
}
]
},
"_embedded": {
"errors": [
{
"message": "Failed to convert argument [searchCriteria] for value [null] due to: Unexpected token VALUE_STRING, expected START_OBJECT \n at [Source: UNKNOWN; byte offset: #UNKNOWN]",
"path": "/searchCriteria"
}
]
},
"message": "Bad Request"
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79303149/400-bad-request-with-complex-pojo-object-in-micronaut-http-get-method[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия