【问题标题】:com.fasterxml.jackson.core.JsonParseException: Unrecognized token 'Hello': was expecting (JSON String, Number, Array,)com.fasterxml.jackson.core.JsonParseException:无法识别的令牌“Hello”:期待(JSON 字符串、数字、数组)
【发布时间】:2020-07-10 20:31:15
【问题描述】:

我在使用 Java 将 React 多部分表单数据发送到后端 MySQL 时遇到问题。 当我在 Postman 中单独测试 React 和 Java 时,它工作正常。当我使用表单将用户数据和图片从前端发送到后端时,会出现问题,我收到无法识别的令牌错误。我对此错误进行了很多研究,但似乎找不到解决方案。请帮助我哪里出错了。

反应:

const [firstName, setFirstName] = useState()
const [lastName, setLastName] = useState()
const [email, setEmail] = useState()
const [phoneNumber, setPhoneNumber] = useState()
const [file, setFile] = useState()

const send = event => {
    const data = new FormData()
    data.append("user", firstName)
    data.append("file", file)


    Axios.post("/new/sale", data).then(res => console.log(res))
        .catch(err => console.log(err))

}

控制器

 @PostMapping(value = "/sale")
    public ResponseEntity<Response> createPost(@RequestParam("file") MultipartFile file,
                                               @RequestParam("user") String user)
            throws IOException {

        ObjectMapper obj = new ObjectMapper();
        Sale sale = obj.readValue(user, Sale.class);
        sale.setPicture(file.getBytes());
        sale.setFileName(file.getOriginalFilename());

        Sale sales = saleRepository.save(sale);
        if(sales != null) {
            return new ResponseEntity<Response>(HttpStatus.OK);
        } else {
            return new ResponseEntity<Response>(HttpStatus.BAD_REQUEST);
        }
    }

POJO

 @Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
private String firstName;
private String lastName;
private String email;
private String phoneNumber;
private Date createdDate;
private Date updatedDate;
private byte [] picture;
private String fileName;

【问题讨论】:

  • 我真的很好奇一些事情:你为什么将代码包含在屏幕截图中?将代码复制为文本不是更方便吗?有什么特别的原因吗?

标签: java reactjs spring-boot multipartform-data jackson-databind


【解决方案1】:

您对 axios 发送的请求的标头有问题。您必须编辑您的请求以将标头content-type 设置为multipart/form-data

const config = {
    headers: {
        'content-type': 'multipart/form-data'
     }
 }

并将此配置(如第三个参数)添加到 axios POST 请求:

Axios.post("/new/sale", data , config).then(res => console.log(res))
.catch(err => console.log(err))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-31
    • 2018-10-29
    • 1970-01-01
    • 1970-01-01
    • 2020-05-13
    • 2021-03-03
    • 1970-01-01
    • 2021-09-27
    相关资源
    最近更新 更多