Вызов Micronaut POST не принимает тело. Получение тела как необязательное.пустоеJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Вызов Micronaut POST не принимает тело. Получение тела как необязательное.пустое

Сообщение Anonymous »

Я пытаюсь создать POST-вызов с помощью Micronaut. Всякий раз, когда я обращаюсь к API из POSTMAN, я всегда получаю на сервере тело как «Optional.empty».
Контроллер:-

Код: Выделить всё

import io.micronaut.core.annotation.NonNull;
import io.micronaut.http.HttpHeaders;
import io.micronaut.http.HttpRequest;
import io.micronaut.http.MediaType;
import io.micronaut.http.annotation.*;
import jakarta.inject.Inject;
import lombok.extern.log4j.Log4j2;

import java.util.Objects;

@Controller("/abc/v1")
@Log4j2
public class AbcController {
@Post("/get-new-user-referral-code")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.TEXT_PLAIN)
@WithSpan
public GetReferralCodeResponse getNewUserReferralCode(HttpRequest  request) {
String body = request.getBody().toString();
HttpHeaders headers = request.getHeaders();

log.info("Body = {}", body);

return apiResponse;
}
}
build.gradle:-

Код: Выделить всё

import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
plugins {
id("com.github.johnrengelman.shadow") version "8.1.1"
id("io.micronaut.application") version "4.4.0"
id("io.micronaut.aot") version "4.4.0"
id("groovy")
id("jacoco")
}

version = "0.1"
group = "com.abc"

repositories {
mavenCentral()
}

dependencies {
annotationProcessor("io.micronaut:micronaut-http-validation")
annotationProcessor("io.micronaut.serde:micronaut-serde-processor")
implementation("io.micronaut.serde:micronaut-serde-jackson")
implementation("io.micronaut:micronaut-management")
implementation("io.micronaut:micronaut-http-client")

implementation 'jakarta.annotation:jakarta.annotation-api:2.1.1'
implementation 'jakarta.xml.bind:jakarta.xml.bind-api:4.0.0'

compileOnly 'org.projectlombok:lombok:1.18.30'
annotationProcessor 'org.projectlombok:lombok:1.18.30'
testCompileOnly 'org.projectlombok:lombok:1.18.30'

implementation 'software.amazon.awssdk:bom'
implementation 'software.amazon.awssdk:appconfigdata'
implementation 'software.amazon.awssdk:sts'
implementation 'software.amazon.awssdk:netty-nio-client:2.24.3'
implementation 'io.netty:netty-codec-http:4.1.108.Final'
implementation 'com.github.luben:zstd-jni:1.5.6-6'
implementation 'software.amazon.awssdk:apache-client:2.20.69'
implementation("software.amazon.awssdk:url-connection-client:2.17+")

implementation 'com.amazonaws:aws-lambda-java-core:1.2.3'
implementation 'software.amazon.awssdk:lambda:2.17.206'

implementation 'software.amazon.awssdk:dynamodb'
implementation 'software.amazon.awssdk:dynamodb-enhanced'

implementation 'software.amazon.awssdk:sns'
implementation 'software.amazon.awssdk:sqs'

implementation 'org.apache.logging.log4j:log4j-api:2.20.0'
implementation 'org.apache.logging.log4j:log4j-core:2.20.0'

implementation 'org.json:json:20231013'
implementation 'org.jsonschema2pojo:jsonschema2pojo-core:1.2.1'

// opentelemetry
implementation("io.opentelemetry:opentelemetry-exporter-otlp")
implementation('io.opentelemetry.instrumentation:opentelemetry-instrumentation-annotations:2.3.0')
implementation("io.opentelemetry:opentelemetry-exporter-logging")
implementation("io.opentelemetry:opentelemetry-sdk")
implementation("io.reactivex.rxjava2:rxjava:2.2.21")

testAnnotationProcessor 'io.micronaut:micronaut-inject-java'

implementation("io.micronaut.kafka:micronaut-kafka")

developmentOnly("io.micronaut.controlpanel:micronaut-control-panel-ui")
developmentOnly("io.micronaut.controlpanel:micronaut-control-panel-management")

implementation("io.micronaut.objectstorage:micronaut-object-storage-aws")

testImplementation 'org.mockito:mockito-core:3.12.4'

}

application {
mainClass = "com.abc.Application"
}
java {
sourceCompatibility = JavaVersion.toVersion("21")
targetCompatibility = JavaVersion.toVersion("21")
}

graalvmNative.toolchainDetection = false
micronaut {
runtime("netty")
testRuntime("junit5")
processing {
incremental(true)
annotations("com.abc.*")
}
aot {
// Please review carefully the optimizations enabled below
// Check https://micronaut-projects.github.io/micronaut-aot/latest/guide/ for more details
optimizeServiceLoading = false
convertYamlToJava = false
precomputeOperations = true
cacheEnvironment = true
optimizeClassLoading = true
deduceEnvironment = true
optimizeNetty = true
replaceLogbackXml = true
}
}

tasks.named("dockerfileNative") {
jdkVersion = "21.0.4"
}

Журналы

Код: Выделить всё

"Unrecognized token 'Optional':  was expecting (JSON String, Number, Array, Object or token 'null', 'true' or 'false')\n at [Source: REDACTED (`StreamReadFeature.INCLUDE_SOURCE_IN_LOCATION` disabled)
Запрос на скручивание: -

Код: Выделить всё

curl --location 'http://localhost:8080/referrals/v1/get-new-user-referral-code' \
--header 'Content-Length: 1000' \
--header 'Content-Type: text/plain' \
--data 'abc'
Я пробовал несколько изменений из доступной документации, но безуспешно.
Кто-нибудь может помочь мне понять, почему я получаю пустое тело в запросе.
Запросы GET работают нормально.
Я также могу получать все заголовки в API.
Проблема связана только с телом

Подробнее здесь: https://stackoverflow.com/questions/792 ... onal-empty
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»