全局异常 Content type 'multipart/form-data;boundary=---;charset=UTF-8' not supported

springboot开发框架,实现导入excel功能时,出现了异常。

2019-08-20 11:55:00.789 [mro: 14b7e87c71c5a153][http-nio-8003-exec-5] ERROR com.*.*.tools.handler.ExceptionHandler - >>>>>>>>> 全局异常 Content type 'multipart/form-data;boundary=8W9FvXCsB3vQi-8vDdsixqHYDb68OBbo;charset=UTF-8' not supported >>>>>>>>>>>>>>
org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'multipart/form-data;boundary=8W9FvXCsB3vQi-8vDdsixqHYDb68OBbo;charset=UTF-8' not supported
        at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters(AbstractMessageConverterMethodArgumentResolver.java:237)
        at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.readWithMessageConverters(RequestResponseBodyMethodProcessor.java:150)
        at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.resolveArgument(RequestResponseBodyMethodProcessor.java:128)
        at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:121)
        at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:158)
        at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:128)
        at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:97)
        at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827)
        at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738)
        at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
        at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:967)
        at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901)
        at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
        at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:872)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
        at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
        at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
        at org.springframework.boot.web.filter.ApplicationContextHeaderFilter.doFilterInternal(ApplicationContextHeaderFilter.java:55)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
        at org.apache.catalina.filters.RemoteIpFilter.doFilter(RemoteIpFilter.java:865)
        at org.apache.catalina.filters.RemoteIpFilter.doFilter(RemoteIpFilter.java:902)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
        at com.runlion.security.server.filter.UserInfoFilter.doFilter(UserInfoFilter.java:59)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
        at org.springframework.boot.actuate.trace.WebRequestTraceFilter.doFilterInternal(WebRequestTraceFilter.java:110)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)

springboot开发。

1.代码实现,controller层:

@RequestMapping(value = "/importExcel",method = RequestMethod.POST)
	public BaseResultVo uploadExcel(@RequestParam("file") MultipartFile file, @RequestParam("id") Long id) throws Exception {
		return checkInventoryService.uploadExcel(file, id);
	}

2.使用postman工具测试该导入接口。

 

点击send,出错。

3. checkInventoryService.uploadExcel(file, id);实现类调用了另一个微服务。

另一个微服务后台抛出上面的异常 :全局异常 Content type 'multipart/form-data;boundary=8W9FvXCsB3vQi-8vDdsixqHYDb68OBbo;charset=UTF-8' not supported >>>>>>>>>>>>>>

@Override
	@Transactional(rollbackFor = {CheckException.class, Exception.class})
	public void updateCheckStatus(CheckInventory checkInventory) throws Exception {
    /todo
    List<Long> locationIds = checkInventoryDetailDao.selectFinished(checkInventory.getId());
		if (!CollectionUtils.isEmpty(locationIds)) {
			LocationDTO locationDTO = new LocationDTO();
			locationDTO.setLocationIds(locationIds);
			locationDTO.setState(locationEnum.StateEnum.yes.getId());
			BaseResultVo resultVo = locationApi.updateStatus(locationDTO);//1.这里报异常
			if (IntegerUtil.notEqualTo(BaseResultVo.SUCCESS_CODE,  resultVo.getStatus())) {
				throw new     CheckException(CheckException.CheckPlanExceptionEnum.fail_update_location.getValue(),
						    CheckException.CheckPlanExceptionEnum.fail_update_location.getId());
			}
		}
  /// todo
}

feign接口:

@FeignClient("sat-oms")
public interface LocationApi {
	/**
	 * 修改库位状态
	 * @param dto
	 * @return
	 */
	@RequestMapping(value = "/api/location/updateStatus",method = RequestMethod.POST)
	BaseResultVo updateStatus(@RequestBody LocationDTO dto);

	@GetMapping(value = "/api/location/queryByCode")
	LocationVO queryByCode(@RequestParam(name = "warehouseId") Long warehouseId,
						   @RequestParam(name = "areaCode", defaultValue = "") String areaCode,
						   @RequestParam(name = "reservoirAreaCode", defaultValue = "") String reservoirAreaCode,
						   @RequestParam(name = "shelfOrder", defaultValue = "") String shelfOrder);
	
	@GetMapping(value = "/api/location/update1Status")
	BaseResultVo update1Status(@RequestParam(name = "locationIds", defaultValue = "") String locationIds);
}

feign实现:

@Slf4j
@RestController
public class LocationApiImpl implements LocationApi {
@Override
    public BaseResultVo updateStatus(@RequestBody LocationDTO dto) {
        try{
            return locationService.updateStatus(dto);
        }catch(Exception e){
            log.error("系统异常",e);
            return BaseResultVo.error();
        }
    }

    @Override
    public LocationVO queryByCode(@RequestParam(name = "warehouseId") Long warehouseId,
                                  @RequestParam(name = "areaCode", defaultValue = "") String areaCode,
                                  @RequestParam(name = "reservoirAreaCode", defaultValue = "") String reservoirAreaCode,
                                  @RequestParam(name = "shelfOrder", defaultValue = "") String shelfOrder) {
        LocationSearchDTO locationSearchDTO = new LocationSearchDTO();
        locationSearchDTO.setWarehouseId(warehouseId);
        locationSearchDTO.setAreaCode(areaCode);
        locationSearchDTO.setReservoirAreaCode(reservoirAreaCode);
        locationSearchDTO.setShelfOrder(shelfOrder);
        return locationDao.queryByCode(locationSearchDTO);
    }

    @Override
    public BaseResultVo update1Status(@RequestParam(name = "locationIds", defaultValue = "") String locationIds) {
        try{
            LocationDTO dto = new LocationDTO();
            dto.setState(1);
            dto.setLocationIds(JSONArray.parseArray(locationIds, Long.class));
            return locationService.updateStatus(dto);
        }catch(Exception e){
            log.error("系统异常",e);
            return BaseResultVo.error();
        }
    }

}

需要将

BaseResultVo resultVo = locationApi.updateStatus(locationDTO);

改成

BaseResultVo resultVo = locationApi.update1Status(JSONArray.toJSONString(locationIds));

就OK!

4. 总结

具体原理尚不清楚。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值