0

よく検索しましたが、解決策が見つかりません。同様のスレッドがスタック オーバーフローにもあります。しかし、使用できません。そのため、新しいスレッドを作成しました。

私のJSPは、

<boby>
<% System.out.println("request.getContextPath() : "+request.getContextPath()); %>
<h1>Spring_JsonTest Example</h1>
    <table>
        <tr><td colspan="2"><div id="error" class="error"></div></td></tr>
        <tr><td>Enter your name : </td><td> <input type="text" id="name"><br/></td></tr>
        <tr><td>Your Education : </td><td> <input type="text" id="education"><br/></td></tr>
        <tr><td colspan="2"><input type="button" value="Add Users" onclick="doAjaxPost()"><br/></td></tr>
        <tr><td colspan="2"><div id="info" class="success"></div></td></tr>
    </table>    
</body>

私のJqueryは、

function doAjaxPost() {  
      // get the form values  
      var name = $('#name').val();
      var education = $('#education').val();

      $.ajax({  
        type: "POST",  
        url: contexPath + "/AddUser.html",  
        data: "name=" + name + "&education=" + education,
        success: function(response){
          // we have the response 
          if(response.status == "SUCCESS"){
          userInfo = "<ol>";
          for( i =0 ; i < response.result.length ; i++){
              userInfo += "<br><li><b>Name</b> : " + response.result[i].name + 
              ";<b> Education</b> : " + response.result[i].education;
          }
          userInfo += "</ol>";
          $('#info').html("User has been added to the list successfully. " + userInfo);
          $('#name').val('');
              $('#education').val('');
              $('#error').hide('slow');
              $('#info').show('slow');
          }else{
          errorInfo = "";
          alert("Success response : "+response)
          for( i =0 ; i < response.result.length ; i++){
              errorInfo += "<br>" + (i + 1) +". " + response.result[i].code;
          }
          $('#error').html("Please correct following errors: " + errorInfo);
          $('#info').hide('slow');
          $('#error').show('slow');
          }       
        },  
        error: function(xhr, ajaxOptions, thrownError)
            alert("status :"+xhr.status+"\nthrownError : "+thrownError+"\nresponseText : "+xhr.responseText);
            alert('Error: ' +xhr.description);  
        } 
      });  
    }  

私のコントローラーは、

@Controller
public class UserController {
    private List<User> userList = new ArrayList<User>(); 

    @RequestMapping(value="/AddUser.html",method=RequestMethod.POST)
    public @ResponseBody JsonResponse addUser(@ModelAttribute(value="user") User user, BindingResult result ){
        System.out.println("Add user POST method");
        JsonResponse res = new JsonResponse();
        ValidationUtils.rejectIfEmpty(result, "name", "Name can not be empty.");
        ValidationUtils.rejectIfEmpty(result, "education", "Education not be empty");
        if(!result.hasErrors()){
            userList.add(user);
            res.setStatus("SUCCESS");
            res.setResult(userList);
        }else{
            res.setStatus("FAIL");
            res.setResult(result.getAllErrors());
        }

        return res;
    }

}

私の JsonResponse.java は、

package com.tps.jsonTest.service;

public class JsonResponse {
    private String status = null;
    private Object result = null;
    public String getStatus() {
        return status;
    }
    public void setStatus(String status) {
        this.status = status;
    }
    public Object getResult() {
        return result;
    }
    public void setResult(Object result) {
        System.out.println("Result : "+result.toString());
        this.result = result;
    }

}

私の User.java は、

package com.tps.jsonTest.service;

public class User {

    private String name = null;
    private String education = null;

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getEducation() {
        return education;
    }
    public void setEducation(String education) {
        this.education = education;
    }

}

私のコンソールでは、

Add user POST method
Name : Anand
Education : B.E
Result : [com.tps.jsonTest.service.User@df2940]

私が使用したJarファイルは、

commons-logging-1.1.1.jar
jackson-core-asl-1.9.12.jar
jackson-mapper-asl-1.9.12.jar
log4j-1.2.9.jar
servlet-api-2.4.jar
spring-aop-3.2.2.RELEASE.jar
spring-beans-3.2.2.RELEASE.jar
spring-context-3.2.2.RELEASE.jar
spring-context-support-3.2.2.RELEASE.jar
spring-core-3.2.2.RELEASE.jar
spring-expression-3.2.2.RELEASE.jar
spring-web-3.2.2.RELEASE.jar
spring-webmvc-3.2.2.RELEASE.jar

私のブラウザでは、エラーは次のようになります。

ここに画像の説明を入力

jqueryを使用してオブジェクトを解析できず、エラーが発生します。スタックユーザーが助けてくれることを願っています。

良い回答は大歓迎です。ありがとうございます。

4

4 に答える 4

3

これは、Spring 3.2.2 または 3.2.3 または 3.2.4 の問題です。Spring 3.0.0 と Spring 3.1.4 で同じ例を試しましたが、問題なく動作しています。スプリングジャーを交換して試してみてください。

よろしくマドゥ

于 2013-09-07T17:27:19.817 に答える
2

同じ問題がありました。UrlBasedViewResolver で Spring 3.2 を使用しています。

すべてのajax呼び出しで406が返されました。上記のすべてのソリューションでヘッダー、dataTypeを変更しようとしましたが、何も機能しませんでした。その後、ジャクソンの瓶がなくなっていることがわかりました。以下の 2 つの jar を追加したところ、問題なく動作し始めました。

jackson-core-asl-1.9.4.jar jackson-mapper-asl-1.9.4.jar

于 2014-05-12T01:56:00.603 に答える
1

あなたの問題は、応答のコンテンツタイプが要求に受け入れられないことです。

あなたの ajax 呼び出しは を指定していないdataTypeため、jQuery は URL 拡張子に基づいて応答が content typetext/htmlである必要があると推測しますが、サーバーは pojo を html に変換する方法を知りません!

dataType='json'解決策は、単純にajax 呼び出しに追加することです。

お役に立てれば。

于 2013-04-20T19:38:43.173 に答える
0

を実行しているためPOST、データはクエリ文字列形式であってはなりません。data代わりに、パラメーターの json オブジェクトを渡します。

data:{name: name, 
      education: education}
于 2013-04-11T03:32:14.153 に答える