2

Кажется, что есть несколько сообщений, таких как here, которые спрашивают, как использовать библиотеки HTTPClient Apache Commons в Java, чтобы сделать POST для сервлета. Тем не менее, похоже, что у меня возникают некоторые проблемы с тем же, что и с помощью аннотированного метода контроллера Spring. Я пробовал несколько вещей, но получил HTTP 401 Bad Request ответы с сервера. Любые примеры этого были бы весьма признательны.Apache HttpClient делает многопользовательский POST для Spring @Controller class

EDIT: код Я пытаюсь использовать:

//Server Side (Java) 
@RequestMapping(value = "/create", method = RequestMethod.POST) 
public void createDocument(@RequestParam("userId") String userId, 
          @RequestParam("file") MultipartFile file, HttpServletResponse response) { 
    // Do some stuff        
} 

//Client Side (Groovy) 
    void processJob(InputStream stream, String remoteAddress) { 
    HttpClient httpclient = new DefaultHttpClient() 
    httpclient.getParams().setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1) 
    HttpPost httppost = new HttpPost("http://someurl/rest/create") 

    MultipartEntity mpEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE) 
    InputStreamBody uploadFilePart = new InputStreamBody(stream, 'application/octet-stream', 'test.file') 
    mpEntity.addPart('file', uploadFilePart) 
    mpEntity.addPart('userId', new StringBody('testUser')) 
    httppost.setEntity(mpEntity) 

    HttpResponse response = httpclient.execute(httppost); 
    println(response.statusLine) 
} 

Тем не менее получение 400 Bad Request в ответ от сервера.

+0

вы можете показать код/​​с что вы пробовали? – Ritesh

+0

Пытался дать базовый код от клиента и сервера без слишком большого количества внешних зависимостей. – Greymeister

ответ

3

Я ненавижу, чтобы ответить на мой собственный вопрос, когда он показывает некомпетентность, но оказывается, что код был штраф, данный контроллер не имеет CommonsMultipartResolver, определенный в его сервлет-context.xml файл (несколько DispatcherServlets ... длинная история :()

Вот что я добавил, чтобы сделать его работу:

<!-- ========================= Resolver DEFINITIONS ========================= --> 
<bean id="multipartResolver" 
     class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> 

    <!-- one of the properties available; the maximum file size in bytes --> 
    <property name="maxUploadSize" value="50000000"/> 
</bean> 
2

Вот пример из the Spring Reference:

@Controller 
public class FileUpoadController { 

    @RequestMapping(value = "/form", method = RequestMethod.POST) 
    public String handleFormUpload(@RequestParam("name") String name, 
     @RequestParam("file") MultipartFile file) { 

     if (!file.isEmpty()) { 
      byte[] bytes = file.getBytes(); 
      // store the bytes somewhere 
      return "redirect:uploadSuccess"; 
     } else { 
      return "redirect:uploadFailure"; 
     } 
    } 

} 
+0

Джеймс, это рабочий пример со стороны контроллера Spring, я пытаюсь выяснить клиентскую сторону, используя HTTPClient, любые идеи? – Greymeister

+0

На стороне клиента вы можете использовать Spring [RestTemplate] (http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/remoting.html#rest-client-access) для использования веб-служб RESTful. Я все еще пытаюсь найти более общий пример HTTP-клиента. – earldouglas

+1

[Здесь] (http://www.earldouglas.com/a-secure-restful-web-service) Я сделал * очень * рудиментарный HTTP-клиент в методе 'EmployeeControllerTest.get'. Надеюсь, он может указать вам в правильном направлении. – earldouglas

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