Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Jackson无法构造BeanSerializer_Java_Json_Jackson - Fatal编程技术网

Java Jackson无法构造BeanSerializer

Java Jackson无法构造BeanSerializer,java,json,jackson,Java,Json,Jackson,来自Java初学者的问题。 我有这门课: package ca.intfast.code; import java.io.Serializable; import java.util.ArrayList; public class Campaign implements Serializable { private static final long serialVersionUID = 1L; private int campaignId; private Coun

来自Java初学者的问题。 我有这门课:

package ca.intfast.code;

import java.io.Serializable;
import java.util.ArrayList;

public class Campaign implements Serializable {
    private static final long serialVersionUID = 1L;
    private int campaignId;
    private Country targetedCountry;
    private String targetedDomain;
    private ArrayList<BannerSize> availableBannerSizeList;
    
    // Constructors:

    public Campaign() { // needed for serialization
        super();
    };

    public Campaign(int campaignId, Country targetedCountry, String targetedDomain, ArrayList<BannerSize> availableBannerSizeList) {
        super();
        this.setCampaignId(campaignId);
        this.setTargetedDomain(targetedDomain);
        this.setTargetedCountry(targetedCountry);
        this.setTargetedDomain(targetedDomain);
        this.setAvailableBannerSizeList(availableBannerSizeList);
    }
    
    // Methods:
    
    public String getDomainOfTargetedDomain() {
        return Util.extractDomainName(getTargetedDomain()); // "https://toronto.com/" >>> "toronto.com"
    }
    
    // Getters/setters:
    
    public int getCampaignId() {
        return campaignId;
    }
    public void setCampaignId(int campaignId) {
        if (campaignId < 1) throw new IllegalArgumentException(campaignId + " must be positive.");
        this.campaignId = campaignId;
    }
    
    public Country getTargetedCountry() {
        return targetedCountry;
    }
    public void setTargetedCountry(Country targetedCountry) {
        if (targetedCountry == null) throw new IllegalArgumentException(targetedCountry + " cannot be null.");
        this.targetedCountry = targetedCountry;
    }
    
    public String getTargetedDomain() {
        return targetedDomain;
    }
    public void setTargetedDomain(String targetedDomain) {
        if (targetedDomain == null) throw new IllegalArgumentException(targetedDomain + " cannot be null.");
        if (!Util.isValidURL(targetedDomain)) throw new IllegalArgumentException(targetedDomain + " is not a valid URL.");
        this.targetedDomain = targetedDomain;
    }
    
    public ArrayList<BannerSize> getAvailableBannerSizeList() {
        return availableBannerSizeList;
    }
    public void setAvailableBannerSizeList(ArrayList<BannerSize> availableBannerSizeList) {
        if (availableBannerSizeList == null) throw new IllegalArgumentException(availableBannerSizeList + " cannot be null.");
        this.availableBannerSizeList = availableBannerSizeList;
    }
}
包ca.intfast.code;
导入java.io.Serializable;
导入java.util.ArrayList;
公共类活动实现可序列化{
私有静态最终长serialVersionUID=1L;
私人ID;
私人国家目标国家;
私有字符串targetedDomain;
私有数组列表可用的annersizelist;
//建造商:
序列化需要公共活动(){//
超级();
};
公共活动(int-campaignId、国家/地区targetedCountry、字符串targetedDomain、ArrayList availableBannerSizeList){
超级();
此.setCampaignId(活动ID);
这个.setTargetedDomain(targetedDomain);
此.setTargetedCountry(targetedCountry);
这个.setTargetedDomain(targetedDomain);
此.setAvailableBannerSizeList(availableBannerSizeList);
}
//方法:
公共字符串GetDomainOfTargetDomain(){
返回Util.extractDomainName(getTargetedDomain());/“https://toronto.com/“>>>”多伦多网站“
}
//接受者/接受者:
public int getCampaignId(){
返回活动ID;
}
公共无效setCampaignId(int-campaignId){
如果(活动ID<1)抛出新的IllegalArgumentException(活动ID+“必须为正”);
this.campaign=campaign;
}
公共国家/地区获取目标国家/地区(){
返回目标国家;
}
public void setTargetedCountry(国家/地区targetedCountry){
如果(targetedCountry==null)抛出新的IllegalArgumentException(targetedCountry+“不能为null”);
this.targetedCountry=targetedCountry;
}
公共字符串getTargetedDomain(){
返回targetedDomain;
}
public void setTargetedDomain(字符串targetedDomain){
如果(targetedDomain==null)抛出新的IllegalArgumentException(targetedDomain+“不能为null”);
如果(!Util.isvalidul(targetedDomain))抛出新的IllegalArgumentException(targetedDomain+“不是有效的URL”);
this.targetedDomain=targetedDomain;
}
公共阵列列表getAvailableBannerSizeList(){
返回可用的浏览器列表;
}
public void setAvailableBannerSizeList(ArrayList availableBannerSizeList){
如果(availableBannerSizeList==null)抛出新的IllegalArgumentException(availableBannerSizeList+“不能为null”);
this.availableBannerSizeList=availableBannerSizeList;
}
}
我正在尝试将活动类的测试对象写入JSON文件:

ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
Campaign testCampaign = new Campaign(1, Country.FRANCE, "https://paris.com/", new ArrayList<BannerSize>(List.of(BannerSize.x300y250, BannerSize.x600y200)));
try {
    objectMapper.writeValue(new File("D:/bids.json"), testCampaign); // this line gives the error
} catch (JsonGenerationException e) {
    e.printStackTrace();
} catch (JsonMappingException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
}
ObjectMapper ObjectMapper=new ObjectMapper();
configure(空bean上的SerializationFeature.FAIL\u,false);
活动测试活动=新活动(1,Country.FRANCE,“https://paris.com/,新的阵列列表(列表(BannerSize.x300y250,BannerSize.x600y200));
试一试{
objectMapper.writeValue(新文件(“D:/bids.json”),testCampaign);//此行给出了错误
}捕获(JsonGenerationException e){
e、 printStackTrace();
}捕获(JsonMappingException e){
e、 printStackTrace();
}捕获(IOE异常){
e、 printStackTrace();
}
错误是:

com.fasterxml.jackson.databind.exc.InvalidDefinitionException:type
ca.intfast.code.Campaign
的类型定义无效:无法为[simple type,class ca.intfast.code.Campaign]构造BeanSerializer:(java.lang.reflect.InaccessibleObjectException)无法公开int ca.intfast.code.Campaign.GetCampampaid()可访问:模块代码不会“导出ca.intfast.code”到模块com.fasterxml.jackson.databind

我在谷歌上搜索的可能性已经用尽了。有人有主意吗


谢谢

请为
国家/地区
类添加代码。提示:更好的做法是在属性定义中使用
List
,因为您没有提交特定的实现。在实现中使用e
ArrayList
。异常消息中的注意事项:(java.lang.reflect.InaccessibleObjectException)无法公开int ca.intfast.code.Campaign.getCampaignId()可访问:Toda!我相信,getCampaignId()出现在消息中只是因为它是第一次遇到的。Country是一个枚举(我试图提供它的代码,但在注释中不可能将其标记为“code”,所以只有一行,但它只是一个简单的枚举)。您不需要在公共活动(int、Country、String、ArrayList)构造函数中使用super(),因为您不扩展任何类和对象类,没有这样的构造函数。Jackson正在使用公共属性或具有公共getter和setter的属性进行数据绑定。super()是在Eclipse创建构造函数时自动添加的。“没有这样的构造函数”-你错了,这样的构造函数存在于祖先(对象)中。调用不存在的构造函数会导致错误。所有类中的所有getter和setter都是公共的(访问私有数据是公共的)。