2010-01-10 2 views
1

Я пробовал интернет для примера, который будет использовать как пружинные джон, так и аннотированные контроллеры. Я новичок в весне, поэтому мне не повезло, json's samples (он использует SimpleController et al.)Помогите с использованием Spring-json с помощью аннотированных контроллеров

В настоящее время у меня есть контроллер с 2 сопоставлениями, один выводит результаты в html (и работает), другой должен отображать json для некоторых вызовов ajax, но когда я обращаюсь к URL-адресу, возвращает 404 и запрашивает /myapp/jsp/jsonView.jsp. Код в методе show выполняется, и он даже проверяет наличие параметра id, поэтому кажется, что проблема в том, что он не знает, как сделать рендеринг, насколько я знаю, это то, что делает компонент viewResolver.

Заранее спасибо за любую помощь :)

Вот что я получил:

@Controller 
public class ItemController { 

//This one works 
@RequestMapping(value = "/items", method = RequestMethod.GET) 
public ModelMap list() { 
    ModelMap map = new ModelMap(); 
    map.addAttribute("item", "value"); 
    return map; 
} 
//This one returns 404, asks for jsonView.jsp 
@RequestMapping(value = "/items.json", method = RequestMethod.GET) 
public ModelAndView show(@RequestParam(value = "id", required = true) String id) { 
    Map model = new HashMap(); 
    model.put("firstname", "Peter"); 
    model.put("secondname", "Schmitt"); 
    return new ModelAndView("jsonView", model); 
    } 
} 

на MYAPP-servlet.xml:

<bean name="viewResolver" class="org.springframework.web.servlet.view.XmlViewResolver"/> 

на views.xml:

<beans> 
<bean name="jsonView" class="org.springframework.web.servlet.view.json.JsonView"> 
    <property name="encoding"> 
     <value>UTF-8</value> 
    </property> 
    <property name="contentType"> 
     <value>application/json</value> 
    </property> 
    <property name="jsonWriter"> 
     <ref bean="sojoJsonWriter"/> 
    </property> 
    <property name="jsonErrors"> 
     <list> 
      <ref bean="statusError"/> 
      <ref bean="modelflagError"/> 
     </list> 
    </property> 
</bean> 

<bean name="sojoJsonWriter" class="org.springframework.web.servlet.view.json.writer.sojo.SojoJsonStringWriter"> 
    <property name="convertAllMapValues"> 
     <value>true</value> 
    </property> 
</bean> 

<bean name="statusError" class="org.springframework.web.servlet.view.json.error.HttpStatusError"> 
    <property name="errorCode"> 
     <value>311</value> 
    </property> 
</bean> 
<bean name="modelflagError" class="org.springframework.web.servlet.view.json.error.ModelFlagError"> 
    <property name="name"> 
     <value>failure</value> 
    </property> 
    <property name="value"> 
     <value>true</value> 
    </property> 
</bean> 

web.xml:

<servlet> 
<servlet-name>myapp</servlet-name> 
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
<load-on-startup>2</load-on-startup> 
</servlet> 
<servlet-mapping> 
<servlet-name>myapp</servlet-name> 
<url-pattern>/myapp/*</url-pattern> 
</servlet-mapping> 

ответ

1

Проблема была с видом распознаватель на servlet.xml, добавил ап: атрибут порядка, так что будет загружаться до InternalResourceViewResolver

<bean name="viewResolver" class="org.springframework.web.servlet.view.XmlViewResolver" p:order="1"/> 
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" p:prefix="/jsp/"p:suffix=".jsp" p:order="10"/> 
2

Там может быть еще одна альтернатива: возможность обновления до весны 3 Вы (это есть релиз состояние сейчас)? Существует фантастический ContentNegotiationResolver, который помогает много, когда дело доходит до обсуждения контента и разрешения на просмотр.

 

<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver"> 
<property name="mediaTypes"> 
    <map> 
    <entry key="xml" value="application/xml"/> 
    <entry key="json" value="application/json"/> 
... 
 

Если теперь добавления .json к вашему URL пути или с помощью соответствующего 'Accept' HTTP заголовок, переданный объект (см model.put (...)) сериализуется соответственно. Для json spring 3 по умолчанию используется jackson.

+0

Я считаю, но уже есть важная часть приложения разработанный, который имеет 0 тестов, не может позволить себе перенести эту старую часть :( – albemuth

Смежные вопросы