如何解决如何使用Spring Data JPA上传Excel或从Excel文件导入数据
我正在尝试使用Spring Data Jpa中的DTO从excel表导入数据。但是,每当我从邮递员那里发布帖子时,都会出现一条错误消息,指出不支持的媒体类型。
请在屏幕截图中查看我的邮递员设置:
请在下面找到控制器的代码:
@RestController
@RequestMapping("api/auditors_report")
public class AuditorStampDutyReportController {
@Autowired
public AuditorStampDutyReportRepository auditorStampDutyReportRepository;
@Autowired
public AuditorStampDutyReportService auditorStampDutyReportService;
@Transactional
@PostMapping(path = "/upload",consumes = MediaType.MULTIPART_FORM_DATA_VALUE,produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<Object> uploadAuditorReport(@RequestPart("file")MultipartFile file){
List <AuditorStampDutyReport> uploadExcelSheet = auditorStampDutyReportService.importAuditorStampDutyReportDetails(file);
return ResponseEntity.ok(new JsonResponse("See Data object for Details!",uploadExcelSheet));
}
}
这是我的excel助手
@Component
@Data
public class ImportExcelHelper {
public static String getOrDefault(Cell cell,String defaultValue) {
return isCellEmpty(cell) ? defaultValue : getString(cell);
}
public static Double getDouble(Cell cell) {
return cell.getCellType() == CellType.STRING ? Double.valueOf(cell.getStringCellValue()) : cell.getNumericCellValue();
}
public static Integer getInteger(Cell cell){
return cell.getCellType() == CellType.STRING ?
Integer.valueOf(cell.getStringCellValue()) : Integer.valueOf(cell.getNumericCellValue()+"");
}
public static Long getLong(Cell cell){
return cell.getCellType() == CellType.STRING ?
Long.valueOf(cell.getStringCellValue()): Long.valueOf(cell.getNumericCellValue()+ "");
}
public static String getString(Cell cell) {
return cell.getCellType() == CellType.NUMERIC ? String.valueOf(cell.getNumericCellValue()) : cell.getStringCellValue().trim();
}
public static boolean isCellEmpty(Cell cell) {
if (cell == null || cell.getCellType() == CellType.BLANK) {
return true;
}
return cell.getCellType() == CellType.STRING && cell.getStringCellValue().trim().isEmpty();
}
public static LocalDate getDate(Cell cell) {
if (isCellEmpty(cell)) {
return null;
}
try {
Date date = cell.getDateCellValue();
return date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
} catch (Exception e) {
return getDate(cell.getStringCellValue());
}
}
public static LocalDate getDate(String date) {
DateTimeFormatter formatter = new DateTimeFormatterBuilder()
.appendOptional(DateTimeFormatter.ofPattern("d/MM/yyyy"))
.appendOptional(DateTimeFormatter.ofPattern("d/M/yyyy"))
.appendOptional(DateTimeFormatter.ofPattern("dd/M/yyyy"))
.appendOptional(DateTimeFormatter.ofPattern("dd/MM/yyyy"))
.toFormatter();
return LocalDate.parse(date,formatter);
}
}
这是我的服务
@Transactional
public List <AuditorStampDutyReport> importAuditorStampDutyReportDetails(MultipartFile mfile) {
List<AuditorStampDutyReport> uploadReport = new ArrayList<>();
AuditorStampDutyReport excelReport = new AuditorStampDutyReport();
int sheetNumber = 0,rowNumber = 0;
try {
Workbook workbook = new XSSFWorkbook(mfile.getInputStream());
for (int i = 0; i < workbook.getNumberOfSheets(); i++) {
sheetNumber = i;
Sheet sheet = workbook.getSheetAt(i);
for (Row row : sheet) {
rowNumber = row.getRowNum();
if (rowNumber < 2) {
String possibleTaxPayerId = ImportExcelHelper.getOrDefault(row.getCell(1),"").trim().replaceAll(" +"," ");
Organization organization = null;
//for name of tax payer
if (possibleTaxPayerId != null) {
organization = organizationRepository.findFirstNameByNameLike(organization.getId(),possibleTaxPayerId);
}
excelReport.setOrganization(organization);
excelReport.setTin_of_tax_payer_organization(ImportExcelHelper.getString(row.getCell(2)));
excelReport.setPeriod_covered(ImportExcelHelper.getOrDefault(row.getCell(3),""));
continue;
}
if (rowNumber > 2 && rowNumber < 6){
excelReport.setDate_of_transaction(ImportExcelHelper.getDate(row.getCell(2)));
excelReport.setDuty_payer(ImportExcelHelper.getString(row.getCell(3)));
excelReport.setTin_of_duty_payer(ImportExcelHelper.getString(row.getCell(4)));
String possibleInstrumentId = ImportExcelHelper.getOrDefault(row.getCell(5),"");
Instruments instruments = null;
if (possibleInstrumentId != null) {
instruments = instrumentsRepository.findByNameLike(instruments.getId(),possibleInstrumentId);
}
excelReport.setInstruments(instruments);
excelReport.setAssessment_number(ImportExcelHelper.getLong(row.getCell(6)));
DeedOfAssignment deedOfAssignment = null;
if(deedOfAssignment.getId()!=null && deedOfAssignment.getId()>0) {
}}
这是我的dto
import lombok.Data;
import java.time.LocalDate;
@Data
public class AuditorStampDutyReportDto {
private Long id;
private Long id_of_tax_payer_organization;
private String duty_payer;
private String tin_of_tax_payer_organization;
private String period_covered;
private LocalDate date_of_transaction;
private String tin_of_duty_payer;
private String address_of_duty_payer;
private Long instrument_id;
private Long assessment_number;
private String receipt_number;
private Double consideration;
private Double rate;
private Double amount_payable;
private Double amount_paid;
private Double balance;
private Double penalty;
private LocalDate date_of_payment;
private Double amount_recoverable;
private Double outstanding;
private String remarks;
private Long user_profile_id;
private Long deed_of_assignment_id;
private Long state_id;
private Long lga_id;
private Long ward;
private String description_of_location;
}
我的主要实体类
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Data;
import javax.persistence.*;
import java.io.Serializable;
import java.time.LocalDate;
@Data
@Entity
@Table(name="auditor_stamp_duty_report")
public class AuditorStampDutyReport implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
@JsonIgnore
@ManyToOne
@JoinColumn(name = "id_of_tax_payer_organization",referencedColumnName = "id")
private Organization organization;
@Column(name = "tin_of_tax_payer_organization")
private String tin_of_tax_payer_organization;
@Column(name = "period_covered")
private String period_covered;
@Column(name = "date_of_transaction")
private LocalDate date_of_transaction;
@JoinColumn(name = "duty_payer")
private String duty_payer;
@Column(name = "tin_of_duty_payer")
private String tin_of_duty_payer;
@Column(name = "address_of_duty_payer")
private String address_of_duty_payer;
@JsonIgnore
@ManyToOne
@JoinColumn(name = "instrument_id",referencedColumnName = "id")
private Instruments instruments;
@Column(name = "assessment_number")
private Long assessment_number;
@Column(name = "receipt_number")
private String receipt_number;
@Column(name = "consideration")
private Double consideration;
@Column(name = "rate")
private Double rate;
@Column(name = "amount_payable")
private Double amount_payable;
@Column(name = "amount_paid")
private Double amount_paid;
@Column(name = "balance")
private Double balance;
@Column(name = "penalty")
private Double penalty;
@Column(name = "outstanding")
private Double outstanding;
@Column(name = "remarks")
private String remarks;
@Column(name="amount_recoverable")
private Double amount_recoverable;
@Column(name="date_of_payment")
private LocalDate date_of_payment;
@JsonIgnore
@ManyToOne
@JoinColumn(name = "user_profile_id",referencedColumnName = "id")
private UserProfile userProfile;
@OneToOne(cascade = CascadeType.ALL)
@JoinTable(
name="auditor_stamp_duty_report_deed_of_assignment",joinColumns = @JoinColumn(name="auditor_stamp_duty_report_id",referencedColumnName = "id"),inverseJoinColumns = @JoinColumn(name="deed_of_assignment_id",referencedColumnName = "id")
)
private DeedOfAssignment deed_of_assignment_id;
}
邮递员的错误
"status": 415,"error": "Unsupported Media Type","trace": "org.springframework.web.HttpMediaTypeNotSupportedException: Content type '' not supported\r\n\tat org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping.handleNoMatch(RequestMappingInfoHandlerMapping.java:227)\r\n\tat org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.lookupHandlerMethod(AbstractHandlerMethodMapping.java:422)\r\n\tat org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.getHandlerInternal(AbstractHandlerMethodMapping.java:367)\r\n\tat org.springframework.web.servlet.mvc.method.
感谢您的帮助。预先感谢
解决方法
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。