@RequestBody無効な問題
3462 ワード
contentType=application/jsonの処理では,@RequestBodyを用いてデータバインドを行い,request bodyでデータを読み出して指定のタイプに変換するのが一般的であるが,要求を処理する方法では,@RequestBodyは1つしか含まれない.ストリームが1回読み込まれるとクローズするからである.
@RequestBodyがデータバインドを行う場合、デフォルトのjson解析ではjackjsonが使用され、3.1.2までに
以上の2つのパラメータ解析はデフォルトでは全解析(そうでなければエラー)であり、データ受信オブジェクトには要求されたjsonのすべてのkeyが含まれなければならない.
クラス#クラス#
json
本当にaddressフィールドをマッピングしたくない場合は、クラスに
原題に戻ると,@RequestBodyの大部分はspring 3で発生する.1.2~4.0バージョンの間、主な原因は、プロジェクトで手動で
2.x
オブジェクトがjsonを回転するときに空のフィールドを無視すると、クラスに
@RequestBodyがデータバインドを行う場合、デフォルトのjson解析ではjackjsonが使用され、3.1.2までに
MappingJacksonHttpMessageConverter
(jackson 1.x)が使用され、その後バージョンはMappingJackson2HttpMessageConverter
(jackson 2.x)が追加され、4.xその後MappingJacksonHttpMessageConverter
を廃棄以上の2つのパラメータ解析はデフォルトでは全解析(そうでなければエラー)であり、データ受信オブジェクトには要求されたjsonのすべてのkeyが含まれなければならない.
クラス#クラス#
public class User{
private String name;
private String age;
// get set
}
json
{"name":" ","age":12,"address":"xxx"}
Userがaddressを指定していないためエラーが発生します本当にaddressフィールドをマッピングしたくない場合は、クラスに
@JsonIgnoreProperties(ignoreUnknown = true)
を追加します.すなわち、未知のカラムを無視します.要求されたjsonパラメータが{"r_name":" ","r_age":12,"r_address":"xxx"}
である場合は、次の方法を使用します.public class User{
@JsonProperty("r_name")
private String name;
@JsonProperty("r_age")
private String age;
// get set
}
原題に戻ると,@RequestBodyの大部分はspring 3で発生する.1.2~4.0バージョンの間、主な原因は、プロジェクトで手動で
MappingJacksonHttpMessageConverter
(3.1.2以降のバージョンがxml構成を通過する場合、springは2.xのjackjsonバージョンがあるかどうかを優先的に検索し、ある場合はMappingJackson2HttpMessageConverter
、そうでない場合は低バージョンのMappingJacksonHttpMessageConverter
)を採用し、@JsonIgnoreProperties(ignoreUnknown = true)
@JsonProperty("r_name")
は1である.xと2.xは同時に存在し、注釈を使用する場合、パッケージエラーにより@RequestBodyが無効なパッケージパス1をエラーする.x import org.codehaus.jackson.annotate.JsonIgnoreProperties;
import org.codehaus.jackson.annotate.JsonProperty;
2.x
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
オブジェクトがjsonを回転するときに空のフィールドを無視すると、クラスに
@JsonInclude(JsonInclude.Include.NON_NULL)
を追加できます.シーケンス番号のフィールドは必要ありません.メソッドまたは属性に@JsonIgnore
を追加するか、クラスに@JsonIgnoreProperties
を追加して複数の無視フィールドを指定します.MappingJacksonHttpMessageConverter
低バージョンの手動指定