2015-06-02 5 views
1

у меня есть следующий метод: RESTfullSpring RequestBody Mapping отображает все атрибуты обнулить значения

@RequestMapping(value = "/budgetLines", 
     method = RequestMethod.POST, 
     produces = MediaType.APPLICATION_JSON_VALUE) 
@Timed 
public void create(@RequestBody BudgetLine budgetLine) { 
    System.out.println("Before Persisting in the repository " + budgetLine); 
    budgetLineRepository.save(budgetLine); 
} 

I'am потребляя этот метод внутри веб-приложения, я проверил с помощью инструмента сетевого анализа (в инструменте веб developper хром), что объект, присланный, действителен (все атрибуты, кроме идентификатора, были установлены с допустимым значением), но затем объект, переданный в репозиторий, содержит только нулевые атрибуты.

вот пример тело:

{ 
    "Name":"testLabel", 
    "Label":"testName", 
    "AnnualBudget":9000 
} 

класс BudgetLine определяется следующим образом:

@Entity 
@Table(name = "T_BUDGETLINE") 
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) 
public class BudgetLine implements Serializable { 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 

    @Column(name = "label") 
    private String Label; 

    @Column(name = "name") 
    private String Name; 

    @Column(name = "annual_budget", precision=10, scale=2) 
    private BigDecimal AnnualBudget; 

    @OneToMany(mappedBy = "budgetLine") 
    @JsonIgnore 
    @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) 
    private Set<Report> reportss = new HashSet<>(); 

    public Long getId() { 
     return id; 
    } 

    public void setId(Long id) { 
     this.id = id; 
    } 

    public String getLabel() { 
     return Label; 
    } 

    public void setLabel(String Label) { 
     this.Label = Label; 
    } 

    public String getName() { 
     return Name; 
    } 

    public void setName(String Name) { 
     this.Name = Name; 
    } 

    public BigDecimal getAnnualBudget() { 
     return AnnualBudget; 
    } 

    public void setAnnualBudget(BigDecimal AnnualBudget) { 
     this.AnnualBudget = AnnualBudget; 
    } 

    public Set<Report> getReportss() { 
     return reportss; 
    } 

    public void setReportss(Set<Report> Reports) { 
     this.reportss = Reports; 
    } 

    @Override 
    public boolean equals(Object o) { 
     if (this == o) { 
      return true; 
     } 
     if (o == null || getClass() != o.getClass()) { 
      return false; 
     } 

     BudgetLine budgetLine = (BudgetLine) o; 

     if (id != null ? !id.equals(budgetLine.id) : budgetLine.id != null) return false; 

     return true; 
    } 

    @Override 
    public int hashCode() { 
     return (int) (id^(id >>> 32)); 
    } 

    @Override 
    public String toString() { 
     return "BudgetLine{" + 
       "id=" + id + 
       ", Label='" + Label + "'" + 
       ", Name='" + Name + "'" + 
       ", AnnualBudget='" + AnnualBudget + "'" + 
       '}'; 
    } 

    public BudgetLine() { 
    } 
} 
+0

Попробуйте использовать первую букву в нижнем регистре для параметров, 'name',' label' и 'annualBudget' в теле запроса. –

+0

Ничего себе, это было спасибо, никогда не приходило мне в голову – mteffaha

+0

Отлично, я добавил его в качестве ответа, так как это помогло. –

ответ

3

Попробуйте с первой буквой в нижнем регистре для параметров

{ 
    "name":"testLabel", 
    "label":"testName", 
    "annualBudget":9000 
} 

весны в значительной мере опирается на стандартных соглашениях об именах Java, поэтому я предлагаю вам также следовать им. В вашем примере вы должны называть поля вашего класса нижней буквой в нижней части.