Spring MVC / Simple Post请求不起作用

在我的Spring MVC应用程序中,我正在尝试创建一个简单的Post请求,但由于请求的正文,它不起作用。 我在我的params中嵌入了对象,Spring引发了这个异常:

org.springframework.beans.InvalidPropertyException: Invalid property 'contrats[0][nomFichier]' of bean class [fr.mnh.signweb.dto.InitSignatureRQDTO]: Property referenced in indexed property path 'contrats[0][nomFichier]' is neither an array nor a List nor a Map; returned value was [fr.mnh.signweb.dto.ContratDTO@1c74fdf]

这是发送给请求的json :(我没有显示值) 在这里输入图像描述

这是我的对象DTO:

@NoArgsConstructor
public class InitSignatureRQDTO {

    @Getter
    @Setter
    private String referenceFournisseur;
    @Getter
    @Setter
    private String produit;
    @Getter
    @Setter
    private String civilite;
    @Getter
    @Setter
    private String nom;
    @Getter
    @Setter
    private String prenom;
    @Getter
    @Setter
    private String email;
    @Getter
    @Setter
    private String telephone;
    @Getter
    @Setter
    private String rue;
    @Getter
    @Setter
    private String complementRue;
    @Getter
    @Setter
    private String codePostal;
    @Getter
    @Setter
    private String ville;
    @Getter
    @Setter
    private String pays;
    @Getter
    @Setter
    private List<ContratDTO> contrats;
    @Getter
    @Setter
    private String messageSms;

}

和:

@NoArgsConstructor
public class ContratDTO {

    @Getter
    @Setter
    private String nomFichier;
    /*@Getter
    @Setter
    private byte[] fichier;*/

}

这是我的控制器:

@RequestMapping(value = "/initSign", method = RequestMethod.POST)
    public ResponseEntity launchSign(InitSignatureRQDTO initSignatureRQDTO) {

        System.out.println(initSignatureRQDTO);


    }

我试图使用@RequestBody:

public ResponseEntity launchSign(@RequestBody InitSignatureRQDTO initSignatureRQDTO) 

但它不起作用。 我有x-www-form-urlencoded; charset = UTF-8不支持异常。

编辑:当使用:

@RequestMapping(value = "/initSign", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE)
    public ResponseEntity launchSign(InitSignatureRQDTO initSignatureRQDTO) {

我得到了这些日志:

DEBUG: org.springframework.web.servlet.DispatcherServlet - DispatcherServlet with name 'appServlet' processing POST request for [/initSign]
DEBUG: org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Looking up handler method for path /initSign
DEBUG: org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver - Resolving exception from handler [null]: org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported
DEBUG: org.springframework.web.servlet.mvc.annotation.ResponseStatusExceptionResolver - Resolving exception from handler [null]: org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported
DEBUG: org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver - Resolving exception from handler [null]: org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported
DEBUG: org.springframework.web.servlet.DispatcherServlet - Null ModelAndView returned to DispatcherServlet with name 'appServlet': assuming HandlerAdapter completed request handling
DEBUG: org.springframework.web.servlet.DispatcherServlet - Successfully completed request

您在POST请求正文中发送JSON内容,因此您需要在请求中将内容类型用作application/json

x-www-form-urlencoded;charset=UTF-8将在您提交表单时使用。


“我有x-www-form-urlencoded; charset = UTF-8不支持异常。” - 我想这是线索。

当你想发送你的InitSignatureRQDTO等数据时,你会想使用application/json 。 这告诉服务器您正在发布JSON数据,如下所示:

{ Name : 'myname', email: 'myemail@email'}

www-form-urlencoded主要在发送少量参数时使用。 它会通知服务器您将对URL中的参数进行编码。

更多细节在这里。

但是,如果您仍想使用www-form-urlencoded ,则可能需要通知您的控件通过以下方式接受该内容:

@RequestMapping(value = "/initSign", method = RequestMethod.POST,consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
链接地址: http://www.djcxy.com/p/48467.html

上一篇: Spring MVC / Simple Post request does not work

下一篇: Ajax and Spring MVC can't get list to spring method