Apache HttpClient создает многочастный класс POST для Spring @Controller - PullRequest
2 голосов
/ 04 февраля 2011

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

РЕДАКТИРОВАТЬ: код, который я пытаюсь использовать:

//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 неверный запрос в ответ от сервера.

Ответы [ 2 ]

3 голосов
/ 04 февраля 2011

Мне неприятно отвечать на мой собственный вопрос, когда он показывает некомпетентность, но оказывается, что с кодом все в порядке, у этого конкретного контроллера не было CommonsMultipartResolver, определенного в его файле servlet-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 голосов
/ 04 февраля 2011

Вот пример из Ссылка на пружину :

@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";
       }
    }

}
...