2016-04-24 7 views
0

私は応答から文字列テキストを取得しようとしています。 私は私の方法の1つでそれを設定しました。 コントローラへのAjaxコールがここにあります。応答から文字列を渡してそれをajax呼び出しにするには

function SaveItems() { 

     $.ajax({ 
       type : "POST", 
       url : '/myProject/dispatcherServlet/controller/saveItem', 
       data : jsondata, 
       dataType : "json", 
       contentType: "application/json", 
       crossDomain:true, 
       success : function(data) { 
        var res=data; 
        alert("data :"+data); 
       }, 
       error : function(data) { 

       } 
       }); 
    } 

コントローラメソッド

@RequestMapping(value = "/saveItems",headers = "Accept=application/json", method = RequestMethod.POST) 
    @ResponseBody 
    public String saveItems(@RequestBody final String configJson,HttpServletRequest request, HttpServletResponse response) 
    { 
     Object json = null; 
     ObjectMapper objectMapper = new ObjectMapper(); 

     try { 
      ProfileModel profileModel = objectMapper.readValue(
        configJson,profileModel.class); 
     configServiceImpl.createProfile(profileModel,request ,response); 
     } catch (JsonParseException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (JsonMappingException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     return "success"; 

    } 

私はResponseオブジェクトに文字列を設定していた場所からサービス方法。私は、コードを実行すると

public void createProfile(profileModel profileModel,HttpServletRequest request,HttpServletResponse response) 
     { 

       String resultID ="error01"; 
       String resultText="Error in creating profile" 
       String appnededText =resultID+resultText; 
       response.setContentType("text/html"); 
       PrintWriter pw = response.getWriter(); 
       pw.write(appnededText); 
       pw.close(); 

} 

は私が

java.lang.IllegalStateException: getWriter() has already been called for this response 
    at org.apache.catalina.connector.Response.getOutputStream(Response.java:588) 
    at org.apache.catalina.connector.ResponseFacade.getOutputStream(ResponseFacade.java:183) 
    at org.springframework.http.server.ServletServerHttpResponse.getBody(ServletServerHttpResponse.java:71) 
    at org.springframework.http.converter.StringHttpMessageConverter.writeInternal(StringHttpMessageConverter.java:109) 
    at org.springframework.http.converter.StringHttpMessageConverter.writeInternal(StringHttpMessageConverter.java:40) 
    at org.springframework.http.converter.AbstractHttpMessageConverter.write(AbstractHttpMessageConverter.java:180) 
    at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters(AbstractMessageConverterMethodProcessor.java:143) 
    at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters(AbstractMessageConverterMethodProcessor.java:89) 
    at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.handleReturnValue(RequestResponseBodyMethodProcessor.java:189) 
    at org.springframework.web.method.support.HandlerMethodReturnValueHandlerComposite.handleReturnValue(HandlerMethodReturnValueHandlerComposite.java:69) 
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:122) 
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:743) 
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:672) 
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:82) 
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:919) 
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:851) 
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:953) 
    at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:855) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:637) 

がどのように応答から文字列を送信ください怒鳴るのエラーを取得し、それを得る「アヤックス」

答えて

1

あなたはステータスを設定することができますエラーに応じてHttpServletResponseのコードを500または400に変更し、エラーメッセージを文字列として返します。 PrintWriterを使用していて、すでにcreateProfileで閉じているということは、問題を引き起こしている可能性があります。

public boolean createProfile(profileModel profileModel, 
    HttpServletRequest request, 
    HttpServletResponse response) 
{ 

    //perform operation 
    return performOperation(); 
} 


@RequestMapping(value = "/saveItems",headers = "Accept=application/json", method = RequestMethod.POST) 
@ResponseBody 
public String saveItems(@RequestBody final String configJson,HttpServletRequest request, HttpServletResponse response) 
{ 
    Object json = null; 
    ObjectMapper objectMapper = new ObjectMapper(); 
    boolean opStatus = false; 
    try { 
     ProfileModel profileModel = objectMapper.readValue(
       configJson,profileModel.class); 
     opStatus = configServiceImpl.createProfile(profileModel,request ,response); 

    } catch (JsonParseException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (JsonMappingException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    if (!opStatus){ 
     response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); 
     String resultID ="error01"; 
     String resultText="Error in creating profile"; 
     String appnededText =resultID+resultText; 
     return appnededText; 
    }else{ 
     return "success"; 
    } 
} 

その後、今私は、コントローラからの文字列を送信することができる午前成功/エラーコールバック・ハンドラ

+0

のデータパラメータのresponseBody属性に文字列を取得する必要があります。私はjspでデータを使用することができません。私は火災のバグを使用して応答の応答テキストを参照してくださいしかし、私は私が警告オブジェクトのオブジェクトを参照してください – Varun

+0

データオブジェクト(あなたの成功、エラーコールバックのパラメータです)は、様々な属性の構成:そのうちのいくつかは、responseTextです。これらを使用して、必要なHTTP応答ステータスコードと返信する文字列を取得することができます – MohamedSanaulla

関連する問題