1

@RequestBody を使用し、そのオブジェクトのすべてのパラメーターを使用して AJAX によってフロントエンドから json を渡すと、機能します。

例: @RequestBody Person person
ここで、person は名前と電話情報を含む Bean です。したがって、フロントエンドから名前と電話情報を含むjsonを渡すと、正常に動作します。

しかし、人物オブジェクトに関連しないjsonのpost_idのような別のパラメータを追加すると機能しません。「クライアントから送信されたリクエストは構文的に正しくありません ()」というエラーが表示されます。

注:春にconsumes = "application/json"produces = "application/json"も追加し、jquery ajaxでcontentType: "application/json"を追加しました

4

1 に答える 1

1

Jackson が使用する ObjectMapper にパラメーターを設定する必要があります。

objMapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);

これは、Spring MVC でこれを設定する 1 つの方法です。

カスタム オブジェクト マッパーを次のように定義します。

import org.codehaus.jackson.map.DeserializationConfig;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.map.SerializationConfig;

public class CustomObjectMapper extends ObjectMapper {
    public CustomObjectMapper(){
        super.configure(SerializationConfig.Feature.WRITE_DATES_AS_TIMESTAMPS, false);
        super.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);
    }

}

このカスタム ObjectMapper を登録します。

<mvc:annotation-driven > 
   <mvc:message-converters register-defaults="false">
       <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" >
           <property name="objectMapper">
               <bean class="....CustomObjectMapper"/>
           </property>
       </bean>
   </mvc:message-converters>
</mvc:annotation-driven>

また、リクエストには、「application/json」の「Accept」ヘッダーが必要です。

于 2012-07-29T22:02:59.063 に答える