我找到的解决办法是,自定义参数类型转换器;
public class FormdataModel {
@FormParam("name")
private String name;
@FormParam("createTime")
private LocalDateTime createTime;
@FormParam("price")
private BigDecimal price;
@FormParam("file")
private InputPart file;
(1)日期LocalDateTime:
@Provider
@Produces(MediaType.TEXT_PLAIN)
public class LocalDateTimeReader implements MessageBodyReader<LocalDateTime> {
@Override
public boolean isReadable(Class<?> aClass, Type type, Annotation[] annotations, MediaType mediaType) {
return type == LocalDateTime.class;
}
@Override
public LocalDateTime readFrom(Class<LocalDateTime> aClass, Type type, Annotation[] annotations,
MediaType mediaType, MultivaluedMap<String, String> multivaluedMap,
InputStream inputStream) throws IOException, WebApplicationException {
byte[] b = new byte[inputStream.available()];
inputStream.read(b);
return LocalDateTime.parse(new String(b), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
}
}
(2)BigDecimal类型
@Provider
@Produces(MediaType.TEXT_PLAIN)
public class BigDecimalReader implements MessageBodyReader<BigDecimal> {
@Override
public boolean isReadable(Class<?> aClass, Type type, Annotation[] annotations, MediaType mediaType) {
return type == BigDecimal.class;
}
@Override
public BigDecimal readFrom(Class<BigDecimal> aClass, Type type, Annotation[] annotations,
MediaType mediaType, MultivaluedMap<String, String> multivaluedMap,
InputStream inputStream) throws IOException, WebApplicationException {
byte[] b = new byte[inputStream.available()];
inputStream.read(b);
return new BigDecimal(new String(b));
}
}