web-dev-qa-db-ja.com

JSON形式の形式で整数値を送信してRESTコントローラーで受信する方法は?

私はこのコードを書いた1つのRESTコントローラーを持っています

@PostMapping(value = "/otp")
public void otp(@RequestBody Integer mobile) {

    System.out.println(" Mobile = "+mobile);
}

そして、私は次の入力でPostmanからこのメソッドを呼び出しています

URL : localhost:8080/otp

Body

{
    "mobile":123456
}

しかし、私は次の例外を取得しています

org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Can not deserialize instance of Java.lang.Integer out of START_OBJECT token; nested exception is com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of Java.lang.Integer out of START_OBJECT token

このようなパラメータとして文字列を使用している場合

@PostMapping(value = "/otp")
public void otp(@RequestBody String mobile) {

    System.out.println(" Mobile = "+mobile);
}

そして、入力をとして渡す

{
    "mobile":123456
}

現在、コンソールで次のように印刷されています

 Mobile = {
    "mobile":"123456"
}

しかし、私はこの値だけが欲しいです123456。私の要件を達成する方法は?

注:追加のPOJOクラスを作成したくない、またはクエリ/パスパラメーターを使用してデータを送信したくない。

3
Altaf Java

あなたがあなたの体を次のように送りたいならば:

{
    "mobile":123456
}

値を受け取る別のオブジェクトを作成します。

ただし、他のオブジェクトなしで整数値のみを受け入れたい場合は、jsonオブジェクトをリクエスト本文に配置せず、整数自体のみを配置します。

Body:

12345

3
Jaiwo99

Jsonと@RequestBodyを使用したプロセスの変換は自動的に行われるため、適切なフィールドを含むクラスを提供する必要があります。リクエスト本文でデータを送信する場合は、Stringを使用してjsonデータをStringとして受信できます。例:

public void test(@RequestBody String request){
        log.info(request);
    }

このように、受け取ったリクエストの本文は文字列です。変換に役立つ他のツールが必要です。org.jsonのように、ここから詳細情報を取得できます HttpServletRequest get JSON POST data ==

ただし、最も簡単な方法は、データを受信するための新しいクラスを作成するか、@ RequestBodyを@RequestParamまたは@Pathvariableに変更することです。

それでもリクエストの本文としてjsonを使用したい場合は、名前、電話番号、メールアドレスなどの多くのフィールドを含む共通のクラスAを作成できます。次に、モバイルのみを含むリクエストを送信した後、次のことを行う必要があります。 A.getMobile()。このように、100のリクエストを受け取ったとしても、1つのPOJOが必要です(ただし、お勧めしません)

1
AokoQin

クラスをリクエストの本文として使用できます。

class Request {
    public Integer mobile;
}

次のようにパラメータを指定します。

public void otp(@RequestBody Request mobile) {
...
1
Henry

以下のようなpojoクラスを作成します。

public class Mobile{
   private Integer mobile;
  //getter and setter
}

その後

public void otp(@RequestBody Mobile mobile)

値の使用を印刷するには

mobile.getMobile();
1
Alien