簡體   English   中英

如何從響應中傳遞字符串並獲取Ajax調用

[英]How to pass string from response and get it ajax call

我正在嘗試從響應中獲取字符串文本。 我用一種方法設置它。 這是對控制器的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)

我如何從響應中發送字符串並在“ Ajax”中獲取它

您可以根據錯誤將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";
    }
}

然后,您應該在成功/錯誤回調處理程序的data參數的responseBody屬性中獲取字符串。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM