code: @Transactional
    @PostMapping(
        value = "/{entityTypeId}/{id}",
        params = "_method=PUT",
        headers = "Content-Type=multipart/form-data")
    @ResponseStatus(NO_CONTENT)
    public void updateFromFormPostMultiPart(
        @PathVariable("entityTypeId") String entityTypeId,
        @PathVariable("id") String untypedId,
        MultipartHttpServletRequest request) {
      Map<String, Object> paramMap = new HashMap<>();
      for (String param : request.getParameterMap().keySet()) {
        String[] values = request.getParameterValues(param);
        String value = values != null ? StringUtils.join(values, ',') : null;
        paramMap.put(param, value);
      }
  
      // add files to param map
      for (Entry<String, List<MultipartFile>> entry : request.getMultiFileMap().entrySet()) {
        String param = entry.getKey();
        List<MultipartFile> files = entry.getValue();
        if (files != null && files.size() > 1) {
          throw new IllegalArgumentException("Multiple file input not supported");
        }
        paramMap.put(param, files != null && !files.isEmpty() ? files.get(0) : null);
      }
      updateInternal(entityTypeId, untypedId, paramMap);
    }
docs: Updates an entity from a html form post.
  
  <p>Tunnels PUT through POST
  
  <p>Example url: /api/v1/person/99?_method=PUT