Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring MockMvc测试无法到达RestController中多部分文件的端点_Spring_Spring Boot_Spring Mvc_Spring Rest - Fatal编程技术网

Spring MockMvc测试无法到达RestController中多部分文件的端点

Spring MockMvc测试无法到达RestController中多部分文件的端点,spring,spring-boot,spring-mvc,spring-rest,Spring,Spring Boot,Spring Mvc,Spring Rest,我在orders控制器中调用一个服务,该控制器接收一个多部分文件并对其进行处理,然后将其保存到数据库中。我试图为它创建一个SpringREST文档,但它甚至没有到达端点。我正在创建一个订单列表,这是服务所期望的。它以流的形式接收订单,如图所示,并在将其保存到数据库之前将其转换为订单流。我已经展示了控制器的主要部分以及生成rest文档的代码。当我运行代码时,我得到以下异常,当我设置一个断点时,它甚至从未到达端点。我还使用了fileupload(),但这也不起作用 例外情况是: 内容类型=应用程序/

我在orders控制器中调用一个服务,该控制器接收一个多部分文件并对其进行处理,然后将其保存到数据库中。我试图为它创建一个SpringREST文档,但它甚至没有到达端点。我正在创建一个订单列表,这是服务所期望的。它以流的形式接收订单,如图所示,并在将其保存到数据库之前将其转换为订单流。我已经展示了控制器的主要部分以及生成rest文档的代码。当我运行代码时,我得到以下异常,当我设置一个断点时,它甚至从未到达端点。我还使用了fileupload(),但这也不起作用

例外情况是:

内容类型=应用程序/json 正文={“路径”:“/订单/订单接收”,“例外名称”: “MissingServletRequestPartException”、“message”:“所需的请求部分‘uploadFile’不可用。”

现在“, “rootExceptionName”:“MissingServletRequestPartException”, “rootMessage”:“MissingServletRequestPartException:所需的请求部分‘uploadFile’不存在”}

@RestController
@请求映射(value=“/orders”)
@验证
类OrderController{
@后期映射(路径=“/order\u receivement”)
public ResponseEntity receiveData(@RequestPart MultipartFile uploadFile,
HttpServletRequest请求,
HttpServletResponse(响应){
如果(!uploadFile.isEmpty()){
试一试{
Reader Reader=新的InputStreamReader(request.getInputStream());
…保存文件
返回新的响应属性(HttpStatus.HttpStatus.CREATED);
}捕获(例外e){
返回新的响应属性(HttpStatus.INTERNAL_SERVER_ERROR);
}
}
返回新的响应属性(HttpStatus.BAD_请求);
}
@试验
public void sendData()引发异常{
ObjectMapper mapper=新的ObjectMapper();
Order Order=repository.getOrder(“1233333”);
List orderList=新建ArrayList():
资源列表。添加(订单);
MockMultipartFile orderFile=新的MockMultipartFile(“订单数据”、“order.json”、“应用程序/json”,
writeValueAsString(orderList).getBytes(Charset.defaultCharset());
mockMvc.perform(多部分(“/orders/order\u receivement”)
.file(orderFile))
.andExpect(状态().isCreated())
.andDo(文件(“发送订单”),
预处理请求(prettyPrint()),
预处理响应(prettyPrint());
}

谢谢Marten Deinum,您关于文件名错误的建议修复了它。
我只是更改了MockMultipartFile中的名称(“uploadsFile”,…)

此处显示的代码与您的异常不匹配,甚至无法编译。但在您的测试中,您的多部分元素名为
order data
而不是
file
,如错误消息所述。我只添加了不包括导入的部分,因为它太长。我不使用任何名为file的标识符。您使用该标识符based处理异常(除非该异常不是异常),并且代码两次使用相同的方法参数,这使其无效。
@RestController
@RequestMapping(value = "/orders")
@Validated
class OrderController{

@PostMapping(path = "/order_reception")

public ResponseEntity receiveData(@RequestPart MultipartFile uploadFile,
                                               HttpServletRequest request,
                                               HttpServletResponse response) {
    if (!uploadFile.isEmpty()) {
        try {
            Reader reader = new InputStreamReader(request.getInputStream()));
            ... save file

            return new ResponseEntity<>(HttpStatus.HttpStatus.CREATED);
        } catch (Exception e) {
            return new ResponseEntity(HttpStatus.INTERNAL_SERVER_ERROR);
        }
    }
    return new ResponseEntity(HttpStatus.BAD_REQUEST);
}




@Test
 public void sendData() throws Exception {

     ObjectMapper mapper = new ObjectMapper();

     Order order = repository.getOrder("1233333");

     List<Order> orderList = new ArrayList<>():

     resourceList.add(order);

     MockMultipartFile orderFile = new MockMultipartFile("order-data", "order.json", "application/json", 

     mapper.writeValueAsString(orderList).getBytes(Charset.defaultCharset()));

     mockMvc.perform(multipart("/orders/order_reception")
             .file(orderFile))
             .andExpect(status().isCreated())
             .andDo(document("send-order",
                     preprocessRequest(prettyPrint()),
                     preprocessResponse(prettyPrint())));
 }