Glassfish JAX-RS JSON映射简单示例内部服务器错误500没有生成日志

Uma*_*maN 7 rest json glassfish jax-rs jaxb

我用两个资源创建了一个简单的REST服务.第一个资源很好用,只返回MediaType.TEXT_PLAIN.

对于第二个资源,我想尝试将POJO映射到Java并遵循以下示例:

https://github.com/jersey/jersey/tree/2.3.1/examples/json-moxy/src/main/java/org/glassfish/jersey/examples/jsonmoxy

我的testbean定义为:

@XmlRootElement
public class Company {

    public String name;
    public String symbol;
    public String country;

    public Company(String name, String symbol,
            String country) {
        this.name = name;
        this.symbol = symbol;
        this.country = country;
    }

    public String getName() {
        return name;
    }

    public String getSymbol() {
        return symbol;
    }

    public String getCountry() {
        return country;
    }
}
Run Code Online (Sandbox Code Playgroud)

资源也是微不足道的:

@Path("company/{name}")
public class CompanyResource {

    private Map<String, Company> companies;

    public CompanyResource() {
        companies = new LinkedHashMap<String, Company>();
        companies.put("Apple", new Company("Apple Inc.", "AAPL", "USA"));
        companies.put("Microsoft", new Company("Microsoft Corp.", "MSFT", "USA"));
        companies.put("Honda", new Company("Honda Motor Co Ltd", "HMC", "Japan"));
        companies.put("Random", new Company("Random Inc.", "RND", "Undefined"));
    }

    @GET
    @Produces(MediaType.APPLICATION_JSON)
    public Company getCompany(@PathParam("name") String name) {
        Company cmp = companies.get(name);
        if (cmp == null) {
            return companies.get("Random");
        }
        return cmp;
    }
}
Run Code Online (Sandbox Code Playgroud)

我调试了一个请求并且没有问题地返回return语句.但是,从这里开始,我认为抛出了一个JAXBException,但我无法查看详细信息,任何日志中都没有任何内容.所有这一切都是浏览器显示"内部服务器错误500"消息.

在监控配置下,我绝望地将一切设置为HIGH.什么都没有出现.

我发现的唯一类似问题是jax-rs 2.0和Glassfish 4无法将@consume JSON转换为PojoJAX RS Jersey + JSON - > HTTP 500内部服务器错误但它们似乎并不完全相关.

对于客户,我只是使用谷歌浏览器与"高级REST客户端"应用程序.

任何帮助将非常感激.

bdo*_*han 11

您需要在类上提供一个无参数构造函数Company.如果您想限制谁可以访问构造函数,您可以将其设为私有.

private Company() {
}
Run Code Online (Sandbox Code Playgroud)