0

私はこの問題に関するStackOverflowの投稿の大部分を読み、多くの修正を試みましたが、最終的に問題を解決するものは何もありませんでした。春はHttpMediaTypeNotSupportedException: Content type 'application/json' not supported

私は次のように定義されたコントローラーを持っています:

 @RequestMapping(method = RequestMethod.POST, value = "/update")
 public @ResponseBody JSONDomainResponse update(@RequestBody Model inModel)

モデルがそのように見える場所:

public class Model implements Serializable {

private static final long serialVersionUID = 2738522159847487651L;
private String id;
private BigDecimal offset;

@JsonCreator
public Model(@JsonProperty("id") String id, @JsonProperty("offset") BigDecimal offset) {
  this.id = id;
  this.offset = offset;
}

public String getID() {
  return id;
}

public BigDecimal getOffset() {
  return offset;
}

public void setID(String id) {
  this.id = id;
}

public void setOffset(BigDecimal offset) {
  this.offset = offset;
}
}

私が使用しようとしているAJAX呼び出しは次のようになります。

$.ajax({
  type : 'POST',
  url : '/update',
  contentType : "application/json",
  data : JSON.stringify({"id":"test", "offset":300})
 });

<mvc:annotation-driven/>context.xmlファイルに構成があり、のMappingJacksonHttpMessageConvertercanRead()メソッドがモデルとJSONメディアタイプに対してtrueを返すことを確認しました。

クラスパスで指定されたJacksonコアとマッパーjarもあります。

コントローラーの署名からModelパラメーターを削除すると、実際に自分の投稿でコントローラーに到達することに気付きました。これにより、モデルに問題があると思われるようになります。ただし、記録される情報は最小限であるため、問題が何であるかを実際に知ることはできません。

前もって感謝します。

4

1 に答える 1

0

私はついに問題の解決策を見つけました。それは些細なことでしたが、まったく自明ではありませんでした。

デシリアライズしようとしたModelオブジェクトが不適切な名前のパッケージに含まれていたことが判明し、Springがモデルを見つけることができなかった場合、生成された例外を飲み込んでfalseを返します。これは、Spring-MVCランド、特にStdDeserializerProviderクラスの奥深くでデバッグすることで発見しました。

このエラーを受け取っている他の人には、このクラスで何が起こっているかを確認するためのコードを作成することを強くお勧めします。次に例を示します。

@Test
public void testThatCanConvertUpdateModel() {
  MappingJacksonHttpMessageConverter conv = new MappingJacksonHttpMessageConverter();
  assertTrue(conv.canRead(YourModel.class, MediaType.APPLICATION_JSON));
}
于 2012-12-13T17:15:10.757 に答える