[英]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.