私はこのコードを書いた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クラスを作成したくない、またはクエリ/パスパラメーターを使用してデータを送信したくない。
あなたがあなたの体を次のように送りたいならば:
{
"mobile":123456
}
値を受け取る別のオブジェクトを作成します。
ただし、他のオブジェクトなしで整数値のみを受け入れたい場合は、jsonオブジェクトをリクエスト本文に配置せず、整数自体のみを配置します。
Body:
12345
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が必要です(ただし、お勧めしません)
クラスをリクエストの本文として使用できます。
class Request {
public Integer mobile;
}
次のようにパラメータを指定します。
public void otp(@RequestBody Request mobile) {
...
以下のようなpojoクラスを作成します。
public class Mobile{
private Integer mobile;
//getter and setter
}
その後
public void otp(@RequestBody Mobile mobile)
値の使用を印刷するには
mobile.getMobile();