【问题标题】:Jersey application - 415 unsupported media typeJersey 应用程序 - 415 不受支持的媒体类型
【发布时间】:2016-05-19 05:58:52
【问题描述】:

我有球衣申请,但我无法使表单提交成功。我收到 415 不支持的媒体类型错误。

AngularJs:

$http.put(url, frmData, {
      transformRequest: angular.identity,
      headers: {'Content-Type': 'application/x-www-form-urlencoded'},
      data: frmData
    });

Java:

@PUT
@Path("/submitform")
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
public void saveForm(@Context HttpServletRequest request,
                     PojoClass pojoClass) {

}

我收到 415 不支持的媒体类型错误。

我哪里出错了?

【问题讨论】:

    标签: java angularjs spring jersey


    【解决方案1】:

    没有一些 tweeking,Jersey 不知道如何将 application/x-www-form-urlencoded 数据转换为 POJO。以下是它所知道的

    public Response post(javax.ws.rs.core.Form form)
    
    public Response post(MultivaluedMap<String, String> form)
    
    public Response post(@FormParam("key1") key1, @FormParam("key2") String key)
    

    如果要使用POJO,可以在POJO参数注解@BeanParam,POJO字段注解@FormParam

    public class POJO {
        @FormParam("key1")
        private String key1;
        @FormParam("key2")
        private String key2;
        // getters/setters
    }
    
    public Response pose(@BeanParam POJO pojo)
    

    如果您使用的是 Angular,那么您也可以使用 JSON,因为这是默认行为。如果您想使用 JSON,您可能需要查看 this post

    【讨论】:

      【解决方案2】:
      1. 添加 @Consumes(MediaType.APPLICATION_JSON) 在你的 saveFormMethod 中

      2. 不要将pojoClass直接映射为输入参数,而是将输入参数更改为string,然后使用gson库将字符串转换回实际的POJO对象。

      【讨论】:

        猜你喜欢
        • 2015-08-21
        • 2015-04-23
        • 2016-06-06
        • 1970-01-01
        • 1970-01-01
        • 2014-05-10
        相关资源
        最近更新 更多