2012-05-01 4 views
0

Это аналогичный вопрос, который был задан раньше, но все же другой, и я просто не могу понять это.Spring MVC Controller не разрешает URI

У меня есть контроллер для веб-службы REST, реализованный с MVC, который должен обрабатывать запросы для пути «/ users/contacts», проблема в том, что в моем тестовом приложении для клиента, когда я пытаюсь ударить по этому пути, я получаю:

No mapping found for HTTP request with URI /users/users/contacts in DispatcherServlet with name 'webservice' 

Опять же, на мой тестовый клиент приложение, когда я изменить путь запроса к чему-то вроде «/ WHATEVERusers/контакты», я получаю сообщение об ошибке, что он не может разрешить «/ WHATEVERusers/контакты»

Я не знаю, почему, когда я пытаюсь ударить по пути, обрабатываемому контроллером, он становится искаженным, но когда я запрашиваю какой-то мусорный путь, это не так.

У меня нет кода передо мной, но я смогу ответить на вопросы, когда вернусь домой.

Вот код из моего тестового клиента:

private static void TestGetContacts() 
{ 
    UserCreateRequest request = new UserCreateRequest(); 

    Gson gson = new Gson(); 

    try 

    { 
     HttpClient client = new DefaultHttpClient(); 

     StringEntity string = new StringEntity(gson.toJson(request), HTTP.UTF_8); 
     string.setContentType("application/json"); 

     URI uri = URIUtils.createURI("http", "localhost", 8888, "https://stackoverflow.com/users/contacts", null, null); 

     HttpPost post = new HttpPost(uri); 
     post.setEntity(string); 

     client.execute(post); 
    } 
    catch(Exception ex) 
    { 
     System.out.println(ex.getMessage()); 
    } 
} 

Вот мой класс контроллера:

@Controller 
@RequestMapping("https://stackoverflow.com/users/contacts") 
public class UserContactService 
{ 
private @Autowired ApplicationContext appContext; 

@RequestMapping(method=RequestMethod.POST, consumes="application/json", produces="application/json") 
public GetContactsResponse GetContacts(@RequestBody UserCreateRequest request) 
{ 
    GetContactsResponse response = new GetContactsResponse(); 

    return response; 
} 
} 

Вот мой сервлет конфигурации:

<?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:p="http://www.springframework.org/schema/p" 
xmlns:context="http://www.springframework.org/schema/context" 
    xmlns:oxm="http://www.springframework.org/schema/oxm" 
    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 
      http://www.springframework.org/schema/oxm http://www.springframework.org/schema/oxm/spring-oxm-3.0.xsd"> 

<!-- 
    - The controllers are autodetected POJOs labeled with the @Controller annotation. 
--> 
<context:component-scan base-package="com.impersonal.server.restservice.users"/>     

<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> 
    <property name="messageConverters"> 
     <list> 
      <ref bean="jsonConverter" /> 
      <!-- 
      <ref bean="marshallingConverter" /> 
      <ref bean="atomConverter" /> 
      --> 
     </list> 
    </property> 
</bean> 

<bean id="jsonConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"> 
    <property name="supportedMediaTypes" value="application/json" /> 
</bean> 

И вот мой веб config:

<?xml version="1.0" encoding="utf-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns="http://java.sun.com/xml/ns/javaee" 
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
version="2.5"> 

<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>classpath:/**/applicationContext.xml</param-value> 
</context-param> 

<servlet> 
    <servlet-name>webservice</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 

<servlet-mapping> 
    <servlet-name>webservice</servlet-name> 
    <url-pattern>/*</url-pattern> 
</servlet-mapping> 

<welcome-file-list> 
    <welcome-file>index.html</welcome-file> 
</welcome-file-list> 

Update: Мои запросы обрабатываются в мой контроллер, но после того, как запрос обрабатывается, отпечатки сервера, что он не может разрешить/пользователей/пользователей/контакты. По какой-то причине еще один запрос на получение DispsatcherServlet, и я не знаю, почему ..

Спасибо, Марк

+0

Без дополнительной информации трудно определить, есть ли проблема в вашем клиенте или в вашем веб-сервисе. Опубликуйте более подробную информацию о своем клиентском тестовом приложении или сделайте путаницу клиента на картинке с помощью простого HTTP-клиента, такого как cURL. Также опубликуйте более подробную информацию о своем веб-сервисе, в том числе о том, как настроить его для обработки определенных URL-адресов. – jtoberon

+0

Можете ли вы предоставить сервлет-сопоставление для своего диспетчерского сервлета, а также контекстное имя веб-приложения - это любой из этих/пользователей. Кроме того, как вы инициализировали Spring MVC, это просто использование mvc: annotation-driven или вы настроили сопоставление handleradapter или handler любым способом –

+0

можете ли вы поделиться своим классом контроллера? – JOHND

ответ

1

Добавление @ResponseBody к моей подписи метода решает мою проблему. Не понимал, что я на самом деле нуждался в этом, и это не привело к действительно странным побочным эффектам.

0

Вы пробовали положить URL в @RequestMapping выше ваш метод, а не выше вашего класса? Я заметил, что это может время от времени решать проблемы с отображением URI.

Вы можете обрабатывать больше URL-адресов различными способами в одном классе. Можно даже добавить @RequestMapping ("/ пользователей") выше вашего класса и добавить различные методы с

  • @RequestMapping ("/ контакты") сопоставляется/пользователей/контакты
  • @RequestMapping ("/ клиентов") карты/потребители/заказчики
Смежные вопросы