@RequestBody無効な問題

3462 ワード

contentType=application/jsonの処理では,@RequestBodyを用いてデータバインドを行い,request bodyでデータを読み出して指定のタイプに変換するのが一般的であるが,要求を処理する方法では,@RequestBodyは1つしか含まれない.ストリームが1回読み込まれるとクローズするからである.
@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低バージョンの手動指定