0

私は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 つの画像を参照)。

エラーメッセージ 01

エラーメッセージ 02

ところで:サーバー側は決して呼び出されません。

私はすでに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>

何が欠けている?ありがとうございました。

4

1 に答える 1