【问题标题】:500 Internal Server Error jersey rest500 内部服务器错误球衣休息
【发布时间】:2015-07-24 20:18:05
【问题描述】:

开发球衣休息网络服务。我需要以以下格式发送 json 输出。我还在下面粘贴了我的 java 对象。但是我的代码无法将我的 java 对象转换为 json。我猜我的 java 对象没有正确注释

{result:[2]
 {city:[         
        cityId : "",             
        cityDesc:"",
         ] 
        area:[           
        areaId : "",             
        areaDesc:"",
         ]           
        userId : ""},
    {city:[      
        cityId : "",             
        cityDesc:"",
         ] 
        area:[           
        areaId : "",             
        areaDesc:"",
         ]           
        userId : ""}}

以下是我的 java 对象

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "area", propOrder = {
        "areaId",
        "areaname"})

    public class Area {

        private String areaId;
        private String areaDesc;
        public String getAreaId() {
            return areaId;
        }
        public void setAreaId(String areaId) {
            this.areaId = areaId;
        }
        public String getAreaDesc() {
            return areaDesc;
        }
        public void setAreaDesc(String areaDesc) {
            this.areaDesc = areaDesc;
        }


@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "city", propOrder = {
        "cityId",
        "cityName"})
public class City {

    private String cityId;
    private String cityDesc;
    public String getCityId() {
        return cityId;
    }
    public void setCityId(String cityId) {
        this.cityId = cityId;
    }
    public String getCityDesc() {
        return cityDesc;
    }
    public void setCityDesc(String cityDesc) {
        this.cityDesc = cityDesc;
    }

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Response", propOrder = {
        "userId",
        "city",
        "area"})
public class Response {
    @XmlAttribute
    protected String userId;
    @XmlAttribute
    protected City city;
    @XmlAttribute
    protected Area area;

@XmlRootElement(name = "Result")
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Result", propOrder = {

})
public class Result {

    private List<Response> result = new ArrayList<Response>();

    public List<Response> getResult() {
        return result;
    }

    public void setResult(List<Response> result) {
        this.result = result;
    }

我的资源方法id如下

@autowired
private C c;

    @POST
    @Path("/bil")
    @Produces({MediaType.APPLICATION_JSON})
    @Consumes({MediaType.APPLICATION_JSON})
    public Result collBil(@Valid Input input){
        Result result = new Result();
        String username=iInput.getUserName();

        if(null != username){
            try{
            result=c.getId(username);

            }
            catch(Exception e){
                e.printStackTrace();
            }
        }

        return result;

    }

我正在使用球衣框架。我能够从我的函数成功返回 Result 类型。但在那之后,当我检查我的其他客户端时,它会抛出 500 错误。我的任何方法都没有抛出异常。但是我的 java 对象没有转换为 json。任何帮助表示赞赏

【问题讨论】:

  • 如果您在客户端收到错误 500,您必须在服务器部分出现错误 - 所以去检查日志吧!此外,您的 JAXB 映射可能有问题:您有一个 Result 类、一个 Response 类、一个 Area 类 - 但粘贴的 JSON 只是一个城市列表
  • 我已经编辑了我的 json。我需要上述格式。我需要响应类列表作为我的 json 输出。我没有在服务器端看到错误。一旦我从终点返回。 Jersey 接管了转换为 json 的工作。它在那边的某个地方抛出问题
  • 当您在客户端收到错误响应(尤其是 500 Internal Server Error)时,这意味着您需要阅读服务器上的日志以查找错误的详细信息。
  • 如果有人验证我编写的 java 对象会很有帮助。我没有在我的控制台中获取日志
  • 你所谓的 JSON 甚至不是有效的 JSON 格式。是什么让您认为您需要这种格式。显示您的资源方法,它期望什么类型?显示您的客户端代码。

标签: java json rest jersey


【解决方案1】:

你需要做这样的事情:

@XmlRootElement(name = "User")
public class User {

    private String username;

    /**
     * @return the username
     */
    @JsonProperty(value = "Username")
    public String getUsername() {
        return username;
    }

    /**
     * @param username the username to set
     */
    @XmlElement(name = "Username")
    public void setUsername(String username) {
        this.username = username;
    }

}

并将jackson-all-1.6.1.jar 添加到您的依赖项中。
在你的web.xml

   <servlet>
        <servlet-name>jersey-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-name>jersey.config.server.provider.packages</param-name>
            <param-value>com.restful.rest</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 班级中

 @POST
 @Path("/post")
 @Consumes({MediaType.APPLICATION_JSON , MediaType.APPLICATION_XML})
 @Produces(MediaType.TEXT_XML)
 public Response getUserName(User user) {
     return Response.status(201).entity(user).build();
 }

【讨论】:

    【解决方案2】:

    您的每个类 Area、City、Response 和 Result 很可能需要一个零参数构造函数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-12
      • 2013-03-24
      • 2016-06-24
      • 1970-01-01
      • 2019-01-17
      • 2011-10-17
      相关资源
      最近更新 更多