2013-05-13 3 views
0

Я следующий WebService позвонитьОшибка на Spring REST WebService вызова

@RequestMapping(value = "modifyUser/{userDn}", method = RequestMethod.POST, headers="Accept=application/json") 
    public @ResponseBody 
    JSONObject modifyUser(@PathVariable String userDn, @RequestBody DirectoryUser directoryUser) { 

     // Modify User 
     boolean modifiedUser = this.authenticationService.modifyUser(userDn, directoryUser.getPassword(), directoryUser); 

     // Build JSONObject 
     JSONObject jsonObject = new JSONObject(); 
     jsonObject.put("modifyUser", modifiedUser); 
     return jsonObject; 
    } 

Я использую следующий метод клиента для доступа выше REST веб-сервиса.

String url = "http://www.local.com:8080/CommonAuth-1.0-SNAPSHOT/api/authentication/modifyUser/"; 
      DefaultHttpClient httpClient = new DefaultHttpClient(); 
      HttpPost httpPost = new HttpPost(url + "user6.external") 

      JSONObject ob = new JSONObject(); 
      ob.put("description", "updated"); 
      System.out.println(ob.toString()); 
      StringEntity entity = new StringEntity(ob.toString()); 
      entity.setContentType("application/json"); 
        httpPost.setEntity(entity); 
      HttpResponse httpResponse = httpClient.execute(httpPost); 
      HttpEntity httpEntity = httpResponse.getEntity(); 

Я всегда получаю «Сервер отклонил этот запрос, потому что объект запроса в формате, который не поддерживается запрашиваемым ресурсом для запрошенного метода» ошибки. Что не так в моем коде. Я могу получить доступ к другим вызовам webservice, не используя @RequestBody и используя простые переменные пути. Проблема связана с @RequestBody и тем, как я использую HttpPost.

public class DirectoryUser { 
private String displayName; 
    private String fullName; 
    private String userName; 
    private String firstName; 
    private String lastName; 
    private String description; 
    private String country; 
    private String company; 
    private String phone; 
    private String emailAddress; 
    private String password; 
    private boolean expirePassword = true; 


    public String getDisplayName() { 
      return displayName; 
     } 

     public void setDisplayName(String displayName) { 
      this.displayName = displayName; 
     } 

     public String getFullName() { 
      return fullName; 
     } 

     public void setFullName(String fullName) { 
      this.fullName = fullName; 
     } 

     public String getUserName() { 
      return userName; 
     } 

     public void setUserName(String userName) { 
      this.userName = userName; 
     } 

     public String getFirstName() { 
      return firstName; 
     } 

     public void setFirstName(String firstName) { 
      this.firstName = firstName; 
     } 

     public String getLastName() { 
      return lastName; 
     } 

     public void setLastName(String lastName) { 
      this.lastName = lastName; 
     } 

     public String getDescription() { 
      return description; 
     } 

     public void setDescription(String description) { 
      this.description = description; 
     } 

     public String getCountry() { 
      return country; 
     } 

     public void setCountry(String country) { 
      this.country = country; 
     } 

     public String getCompany() { 
      return company; 
     } 

     public void setCompany(String company) { 
      this.company = company; 
     } 

     public String getPhone() { 
      return phone; 
     } 

     public void setPhone(String phone) { 
      this.phone = phone; 
     } 

     public String getEmailAddress() { 
      return emailAddress; 
     } 

     public void setEmailAddress(String emailAddress) { 
      this.emailAddress = emailAddress; 
     } 

     public String getPassword() { 
      return password; 
     } 

     public void setPassword(String password) { 
      this.password = password; 
     } 

     public boolean isExpirePassword() { 
      return expirePassword; 
     } 

     public void setExpirePassword(boolean expirePassword) { 
      this.expirePassword = expirePassword; 
      } 

} 

JSON строка Я отправляю это { "Описание": "обновленный"}

+0

Это происходит потому, что Spring не может развязать json, который вы предоставили экземпляру «DirectoryUser». Можете ли вы разместить свой код для этого класса? и пример того, как выглядит ваш json. –

+0

, пожалуйста, посмотрите на код DirectoryUser и строку json, которую я публикую. – Kavitha

ответ

0
   try { 
       /* your code */ 
if (httpResponse != null) { 
          InputStream in = httpResponse.getEntity().getContent(); 
          StringBuffer out = new StringBuffer(); 
          int n = 1; 
          while (n > 0) { 
           byte[] b = new byte[4096]; 
           n = in.read(b); 
           if (n > 0) 
            out.append(new String(b, 0, n)); 
          } 
          System.out.println(out.toString()); 
         } 
        } catch (Exception e) { 
        e.printStackTrace(); 
       } 

Вы можете проверить, что говорит код состояния? Кроме того, проверьте, является ли это HTTPS.

+0

Проблема заключается в том, когда запрос отправляется на сервер. а не на том, что он возвращает и как он обрабатывается. – Kavitha

+0

Это простой запрос Http. не HTTPS. – Kavitha

+0

В web.xml /* vasanth

0

По умолчанию Spring пытается использовать Джексон JSon Маршалл/маршализацию:

private static final boolean jackson2Present = 
     ClassUtils.isPresent("com.fasterxml.jackson.databind.ObjectMapper", WebMvcConfigurationSupport.class.getClassLoader()) && 
       ClassUtils.isPresent("com.fasterxml.jackson.core.JsonGenerator", WebMvcConfigurationSupport.class.getClassLoader()); 

вам нужно добавить Джексон LIBS к вашему проекту.

+0

Я добавил парсера Джексона и конвертер JSON. Теперь я могу получить доступ к вышеуказанному веб-сервису без каких-либо ошибок. – Kavitha

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