Reputation: 1078
I am working in spring mvc with tomcat6. I tried to upload a file and able to do with war deployment using tomcat8.
But I am getting the following error, while using the same war with tomcat6 deployment.
org.springframework.web.bind.MissingServletRequestParameterException: Required String parameter 'userId' is not present
My complete code as follows,
Added jars in pom
<!-- Apache Commons Upload -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.2.2</version>
</dependency>
<!-- Apache Commons Upload -->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.0.1</version>
</dependency>
Added bean for upload in ApplicationContext.xml
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="10000000" />
</bean>
Controller which return the userId
public class UploadDocController extends AbstractController {
@Resource
private UserService userService;
@Override
protected ModelAndView handleRequestInternal(HttpServletRequest request,
HttpServletResponse response) throws Exception {
Long userId = userService.getLoggedInUser(request).getId();
ModelAndView modelAndView = new ModelAndView(UploadDocView.uploadmain);
modelAndView.addObject("userId", userId);
return modelAndView;
}
}
JSP:
<form method="POST" enctype="multipart/form-data" action="upload.htm">
File to upload:
<input type="file" name="file"><br />
<input type="hidden" name="userId" value="${userId}"><br /> <br />
<input type="submit" value="Upload">
</form>
FileUploadController.java
@Controller
public class FileUploadController {
@Resource
private CollectionsRepository collectionsRepository;
@RequestMapping(value="/upload", method=RequestMethod.GET)
public @ResponseBody String provideUploadInfo() {
return "You can upload a file by posting to this same URL.";
}
@RequestMapping(value="/upload.htm", method=RequestMethod.POST)
public ModelAndView handleFileUpload(@RequestParam(value ="userId") String userId,
@RequestParam(value ="file") MultipartFile file){
System.out.println("userId--------"+userId);
if (!file.isEmpty()) {
try {
String filePath = "/home/ubuntu/analyzer/LOS/";
byte[] bytes = file.getBytes();
File newFile = new File(filePath+""+file.getOriginalFilename());
BufferedOutputStream stream =
new BufferedOutputStream(new FileOutputStream(newFile));
stream.write(bytes);
stream.close();
List<BankStatementError> errorList = new ArrayList<BankStatementError>();
Excelsheetreader esr = new Excelsheetreader();
List<String> listaddSN = esr.GetCalculation(Long.parseLong(userId), filePath+""+file.getOriginalFilename());
newFile.delete();
for (int i = 0; i < listaddSN.size(); i++) {
String bank = listaddSN.get(i);
BankStatementError error = collectionsRepository.getErrorByBank(bank);
errorList.add(error);
}
ModelAndView modelAndView = new ModelAndView(UploadDocView.uploadsuccess);
modelAndView.addObject("errorList", errorList);
return modelAndView;
} catch (Exception e) {
ModelAndView modelAndView = new ModelAndView(UploadDocView.uploadexecption);
return modelAndView;
}
} else {
ModelAndView modelAndView = new ModelAndView(UploadDocView.uploadempty);
return modelAndView;
}
}
}
The error I am getting is
org.springframework.web.bind.MissingServletRequestParameterException: Required String parameter 'userId' is not present
Is there any other way to do this using tomcat6? hope someone will suggest in this.
Thanks in advance..
screenshot..
Upvotes: 1
Views: 202
Reputation: 1890
the time when you are calling your jsp file the parameter is not been attached with you response.
see-
<input type="hidden" name="userId" value="${userId}"><br /> <br />
here you are trying to access the value of userId but there might not be availability of the parameter you are looking for.
so possibly adding the parameter with the response will remove the error.
Upvotes: 1