【问题标题】:Issue with RequestMapping POST API?RequestMapping POST API 有问题吗?
【发布时间】:2016-04-01 05:05:41
【问题描述】:

我无法确定我在这里做错了什么。我正在使用应用程序“邮递员”向服务发送请求。该参数是一个非常简单的 POJO,如下所示。当我尝试发送请求时,我得到一个响应:“服务器拒绝了这个请求,因为请求实体的格式不受所请求方法的请求资源支持”

用于请求的类:

 public class LoginAttempt {

        private String userName;
        private String password;
        public String getUserName() {
            return userName;
        }
        public void setUserName(String userName) {
            this.userName = userName;
        }
        public String getPassword() {
            return password;
        }
        public void setPassword(String password) {
            this.password = password;
        }
    }

控制器中的 API:

@RequestMapping(value="/validate", method=RequestMethod.POST, produces="application/json") 
public boolean validateUser(@RequestBody LoginAttempt login) {
    System.out.println("Login attempt for user " + login.getUserName() + login.getPassword());
    return true;
}

【问题讨论】:

    标签: java spring rest


    【解决方案1】:

    FormHttpMessageConverter 在内容类型为 application/x-www-form-urlencoded 时用于 @RequestBody 注释的参数,不能像 @ModelAttribute 那样绑定目标类)。 因此你需要@ModelAttribute 而不是@RequestBody

    要么像这样使用@ModelAttribute注解而不是@RequestBody

         public boolean validateUser(@ModelAttribute LoginAttempt login) 
    

    或者您可以使用适当的 headers 属性创建一个单独的方法表单处理表单数据,如下所示:

        @RequestMapping(value="/validate", method=RequestMethod.POST, headers = "content-type=application/x-www-form-urlencoded" produces="application/json")
    

    【讨论】:

    • 感谢您从后端消除了错误,但现在日志语句由于某种原因正在为实例变量打印两个空值
    【解决方案2】:

    试试添加这个 bean:

    <bean id="jsonConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
        <property name="prefixJson" value="false"/>
        <property name="supportedMediaTypes" value="application/json"/>
    </bean>
    

    【讨论】:

    • 谢谢,就是这样。除了我使用的是 Spring 4.X 所以它是 org.springframework.http.converter.json.MappingJackson2HttpMessageConverter
    猜你喜欢
    • 1970-01-01
    • 2016-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-28
    • 1970-01-01
    • 1970-01-01
    • 2021-06-25
    相关资源
    最近更新 更多