Возврат строки или HTML в запрос ajax с пружиной 2.5

Я использую Spring 2.5 (конфигурация на основе XML) . В моем контроллере Spring, как я могу вернуть строку обратно в мой запрос AJAX? Мой код Ajax выглядит следующим образом:

 jq("#editAdTextSave").click(function() {
        alert( "Handler for .click() called." );
        jq.ajax({
              url: 'bookingDetail.html',
              type: 'POST',
              data: 'action=updateAdText',
              success: function(data) {
                //called when successful
                alert(model);
                //$('#ajaxphp-results').html(data);
              },
              error: function(e) {
                //called when there is an error
                //console.log(e.message);
  }
});
    });

COntroller onSubmit требует возвращаемого значения объекта ModelAndView. Однако мне нужно только вернуть строку. Как я могу это сделать. Пожалуйста, предложите.

2 ответа

Вам нужно использовать @ResponseBody в вашем методе отображения. С помощью @ResponseBody напишет значение, к которому вы вернетесь HttpResponseBody и не будет оцениваться как вид. Вот быстрое демо:

@Controller
public class DemoController {

    @RequestMapping(value="/getString",method = RequestMethod.POST)
    @ResponseBody
    public String getStringData() {
        return "data";
    }    
}

Как и в вопросе, Spring 2.5 используется; @ResponseBody был представлен весной 3.0

@see ResponseBody JavaDocs последней весной


Вернуться к вопросу.

В моем контроллере Spring, как я могу вернуть строку...

Простой ответ в соответствии с сообщением Spring Blog, которое нужно добавить OutputStream в качестве параметра для вашего метода контроллера.

Ваша конфигурация на основе XML должна выглядеть следующим образом

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:context="http://www.springframework.org/schema/context"
   xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

    <context:component-scan base-package="your.controllers"/>

</beans>

И ваш контроллер должен выглядеть так

package your.controllers;

@Controller
public class YourController {

    @RequestMapping(value = "/yourController")
    protected void handleRequest(OutputStream outputStream) throws IOException {
        outputStream.write(
            "YOUR DESIRED STRING VALUE".getBytes()
        );
    }
}

Наконец, если вы хотите сделать это без каких-либо аннотаций вообще, тогда;

Ваша конфигурация на основе XML должна выглядеть так

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="
            http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

    <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>

    <bean name="/yourController" class="your.controllers.YourController"/>

</beans>

И ваш контроллер должен выглядеть так

package your.controllers;

public class YourController extends AbstractController {

    @Override
    protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception {
        response.getOutputStream().write(("YOUR DESIRED STRING VALUE").getBytes());
        return null;
    }
}
Другие вопросы по тегам