私はSpring 4.0.5.RELEASE、Spring MVCをJava Configのみで使用しています
私は pom.xml に次のものを持っています:
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>${jackson.version}</version>
</dependency>
Where <jackson.version>1.9.13</jackson.version>
JSON に関する Spring のデフォルト設定を使用しています。一部@Controller
では、次のものがあります。
@RequestMapping(value="/getjsonperson",
method=RequestMethod.GET,
produces=MediaType.APPLICATION_JSON_VALUE)
public @ResponseBody Person getJSONPerson(){
logger.info("getJSONPerson - getjsonperson");
return PersonFactory.createPerson();
}
@RequestMapping(value="/getperson.json", method=RequestMethod.GET)
public @ResponseBody Person getPersonJSON(){
logger.info("getPerson - getpersonJSON");
return PersonFactory.createPerson();
}
そして正常に動作します。JSON 値が返されたことをブラウザーで確認できます。ここまでは大丈夫です。
Spring MVC + (JSON AJAX) を統合したい
Spring MVC: Ajax & JQueryを参照する方法に関するこのチュートリアルがあります。
OK、AJAX を使用した JSON については次のとおりです (選択ボックスまたはコンボ ボックスを使用して 2 番目のセットまたはコレクションをロードします)。
注: URL は静的です。使用しても/spring-utility/facturaajax/findallproductobycategoria.htm
問題は解決しません
$("#categoria").change(function(event){
var json = {"id" : $(this).find("option:selected").val(), "nombre" : $(this).find("option:selected").text() };
$.ajax({
url: "http://localhost:8080/spring-utility/facturaajax/findallproductobycategoria.htm" ,
data: JSON.stringify(json),
type: "POST",
beforeSend: function(xhr) {
xhr.setRequestHeader("Accept", "application/json");
xhr.setRequestHeader("Content-Type", "application/json");
},
success: function(products) {
alert("all fine!!!!");
}
});
//event.preventDefault();
});
コントローラーについて私は ajax プロセスを処理するために以下を持っています
@RequestMapping(value="/findallproductobycategoria.htm",
method=RequestMethod.POST,
consumes = MediaType.APPLICATION_JSON_VALUE,
produces = MediaType.APPLICATION_JSON_VALUE)
public @ResponseBody Set<Producto> findAllProductoByCategoria(@RequestBody Categoria categoria){
logger.info("findAllProductoByCategoria: {}", categoria.toString());
return this.fakeMultipleRepository.findAllProductoByCategoria(categoria.getId());
}
使用してもheaders="Accept=application/json"
問題headers="Content-Type=application/json"
が解決しません。
POJO はシリアライズ可能です
public class Categoria implements Serializable {
private static final long serialVersionUID = 5655804710111228325L;
public class Producto implements Serializable {
private static final long serialVersionUID = -6362590479124787529L;
問題: select html 要素の値を変更すると、常にHTTP/1.1 406 Not Acceptableが表示されます (添付の 2 つの画像を参照)。
ところで:サーバー側は決して呼び出されません。
私はすでにSOに関する他の投稿を読んでいます。実際には、それらのすべてが Jackson について言及しており、Spring 3.2.xに基づいています。
以下を追加しても問題は解決しません
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-core-asl</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-jaxrs</artifactId>
<version>${jackson.version}</version>
</dependency>
何が欠けている?ありがとうございました。