【问题标题】:Angular JS POST request map to DTO in REST ServicesAngular JS POST 请求映射到 REST 服务中的 DTO
【发布时间】:2014-11-18 21:30:07
【问题描述】:

我是 Angular JS 和 REST 服务的新手,只是在尝试 hello world。

web.xml

<servlet>
        <servlet-name>jersey-helloworld-serlvet</servlet-name>
        <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
        <init-param>
             <param-name>com.sun.jersey.config.property.packages</param-name>
             <param-value>com.ipocc.service</param-value>
        </init-param>
        <init-param>
            <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
            <param-value>true</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

REST 服务类

@Path("/UserManager")
public class UserManagerService {

    @POST
    @Path("/validate")
    @Consumes({ MediaType.APPLICATION_JSON } )
    public Response responseMsg1(final User user) {
        System.out.println("POST :" + user + " " + user.getUserName() + " "  + user.getPassword());
        return Response.status(200).entity("output").build();
    }
}

DTO

@XmlRootElement
public class User {
     @XmlElement public String email;
     @XmlElement public String name;
     @XmlElement public String username;
     //GETTER-SETTER 
}

角度 JS 文件

var validationApp = angular.module('validationApp', []);
validationApp.controller('mainController', function($scope,$http) {
    $scope.submitForm = function() {

            var update_path = "http://localhost:8080/IPOCCService/rest/UserManager/validate";
            var data1 = angular.toJson($scope.user);
            alert(data1);            
            $http({
                  url: update_path, 
                  method: "POST",
                  data:  data1,
                  headers : {
                         "Content-Type" : "application/json; charset=utf-8",
                         "Accept" : "application/json"
                   }
             }).
             success(function(data, status, headers, config) {
                 alert("success");
             }).
             error(function(data, status, headers, config) {
                 alert("failure");
             });

    };
});

我面临的错误

SEVERE: A message body reader for Java class com.ipocc.service.dto.User, and Java type class com.ipocc.service.dto.User, and MIME media type application/json; charset=UTF-8 was not found.
The registered message body readers compatible with the MIME media type are:
*/* ->
  com.sun.jersey.core.impl.provider.entity.FormProvider
  com.sun.jersey.core.impl.provider.entity.StringProvider
  com.sun.jersey.core.impl.provider.entity.ByteArrayProvider
  com.sun.jersey.core.impl.provider.entity.FileProvider
  com.sun.jersey.core.impl.provider.entity.InputStreamProvider
  com.sun.jersey.core.impl.provider.entity.DataSourceProvider
  com.sun.jersey.core.impl.provider.entity.XMLJAXBElementProvider$General
  com.sun.jersey.core.impl.provider.entity.ReaderProvider
  com.sun.jersey.core.impl.provider.entity.DocumentProvider
  com.sun.jersey.core.impl.provider.entity.SourceProvider$StreamSourceReader
  com.sun.jersey.core.impl.provider.entity.SourceProvider$SAXSourceReader
  com.sun.jersey.core.impl.provider.entity.SourceProvider$DOMSourceReader
  com.sun.jersey.core.impl.provider.entity.XMLRootElementProvider$General
  com.sun.jersey.core.impl.provider.entity.XMLListElementProvider$General
  com.sun.jersey.core.impl.provider.entity.XMLRootObjectProvider$General
  com.sun.jersey.core.impl.provider.entity.EntityHolderReader

我想实现当我从 Angular JS 调用 http post 请求时,它应该映射到用户对象,但我在上面遇到错误。如果我将参数保留为字符串,那么我将获取数据为email:"a@a.com",name: "j",username: "j"

【问题讨论】:

    标签: angularjs web-services rest jakarta-ee jaxb


    【解决方案1】:

    我不熟悉 jersey,但您似乎缺少解析接收到的 JSON 数据的 jersey-json 依赖项。 - SO Link

    【讨论】:

    • 我有 jersey-json 依赖
    【解决方案2】:

    如果它对某人有帮助...

    我很抱歉犯了错误的错误。在我的依赖项中,jar 版本不匹配,现在它在 pom.xml 中进行如下更改后可以正常工作

    <dependencies>
    
            <dependency>
                <groupId>com.sun.jersey</groupId>
                <artifactId>jersey-server</artifactId>
                <version>1.17</version>
            </dependency>
            <dependency>
                <groupId>com.sun.jersey</groupId>
                <artifactId>jersey-json</artifactId>
                <version>1.17</version>
            </dependency>
            <dependency>
                <groupId>com.sun.jersey</groupId>
                <artifactId>jersey-client</artifactId>
                <version>1.17</version>
            </dependency>
            <dependency>
                <groupId>com.sun.jersey</groupId>
                <artifactId>jersey-servlet</artifactId>
                <version>1.17</version>
            </dependency>
    
        </dependencies>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-01
      • 2014-07-26
      • 1970-01-01
      • 1970-01-01
      • 2016-04-02
      • 1970-01-01
      • 2023-03-09
      • 2018-02-15
      相关资源
      最近更新 更多