2017-01-11 6 views
0

Es ist das erste Mal, dass eine Java-Service-Klasse für mich nicht richtig funktioniert und ich kenne den Grund nicht.Jersey CRUD - Update und Post funktioniert nicht

Ich habe mehr als 20 Stunden Service und außer dieser Arbeit perfekt:

package it.jack.fdd.services; 
 

 
import java.util.List; 
 

 
import javax.ws.rs.GET; 
 
import javax.ws.rs.HeaderParam; 
 
import javax.ws.rs.POST; 
 
import javax.ws.rs.PUT; 
 
import javax.ws.rs.Path; 
 
import javax.ws.rs.PathParam; 
 
import javax.ws.rs.Produces; 
 
import javax.ws.rs.core.MediaType; 
 

 
import it.jack.fdd.dao.FactoryDao; 
 
import it.jack.fdd.domain.Feedback; 
 
import it.jack.fdd.domain.Staff; 
 
import it.jack.fdd.domain.StaffType; 
 
import it.jack.fdd.dto.StaffDto; 
 
import it.jack.fdd.dto.StaffTypeDto; 
 
import it.jack.fdd.dto.TokenStaffDto; 
 
import it.jack.fdd.util.ConverterDTO; 
 

 
@Path("/feedback") 
 
public class FeedbackServices { 
 
\t 
 
\t @GET 
 
\t @Produces(MediaType.APPLICATION_JSON) 
 
\t public List<Feedback> getFeedback() { 
 
\t 
 
     List<Feedback> listOfFeedback = FactoryDao.getIstance().createBaseDao().getAll(Feedback.class); 
 
\t \t \t return listOfFeedback; 
 
\t \t 
 
\t } 
 
\t 
 
\t @GET 
 
\t @Path("/notread") 
 
\t @Produces(MediaType.APPLICATION_JSON) 
 
\t public List<Feedback> getFeedbackNoRead(@HeaderParam("token") String token) { 
 
\t \t TokenStaffDto ts = new TokenStaffDto(); 
 
\t \t StaffDto s = new StaffDto(); 
 
\t \t StaffTypeDto st = new StaffTypeDto(); 
 
\t \t 
 
\t \t 
 
\t \t Boolean ex = FactoryDao.getIstance().createTokenStaffDao().getExistence(token); 
 
\t \t ts = ConverterDTO.converterTokenStafftoDTO(FactoryDao.getIstance().createTokenStaffDao().getTokenStaffFromToken(token)); 
 
\t \t s = ConverterDTO.converterStafftoDTO((Staff) FactoryDao.getIstance().createBaseDao().getById(ts.getIdtokenStaff(), Staff.class)); 
 
\t \t st = ConverterDTO.converterStaffTypetoDTO((StaffType) FactoryDao.getIstance().createBaseDao().getById(s.getStaffType().getIdstaffType(), 
 
\t \t \t \t StaffType.class)); 
 

 
\t \t if (ex && st.getIdstaffType() == 1) { 
 
\t \t \t List<Feedback> listOfFeedback = FactoryDao.getIstance().createFeedbackDao().notRead(); 
 
\t \t \t return listOfFeedback; 
 
\t \t }else 
 
\t \t \t return null; 
 
\t \t 
 
\t } 
 
\t 
 
\t @GET 
 
\t @Path("/{id}") 
 
\t @Produces(MediaType.APPLICATION_JSON) 
 
\t public Object getFeedbackById(@PathParam("id") int id, @HeaderParam("token") String token) { 
 
\t \t TokenStaffDto ts = new TokenStaffDto(); 
 
\t \t StaffDto s = new StaffDto(); 
 
\t \t StaffTypeDto st = new StaffTypeDto(); 
 
\t \t 
 
\t \t 
 
\t \t Boolean ex = FactoryDao.getIstance().createTokenStaffDao().getExistence(token); 
 
\t \t ts = ConverterDTO.converterTokenStafftoDTO(FactoryDao.getIstance().createTokenStaffDao().getTokenStaffFromToken(token)); 
 
\t \t s = ConverterDTO.converterStafftoDTO((Staff) FactoryDao.getIstance().createBaseDao().getById(ts.getIdtokenStaff(), Staff.class)); 
 
\t \t st = ConverterDTO.converterStaffTypetoDTO((StaffType) FactoryDao.getIstance().createBaseDao().getById(s.getStaffType().getIdstaffType(), 
 
\t \t \t \t StaffType.class)); 
 

 
\t \t if (ex && st.getIdstaffType() == 1) { 
 
\t \t \t return FactoryDao.getIstance().createBaseDao().getById(id, Feedback.class); 
 
\t \t }else 
 
\t \t \t return null; 
 
\t } 
 
\t 
 
\t @POST 
 
\t @Produces(MediaType.APPLICATION_JSON) 
 
\t public int addFeedback(Feedback feedback/*, @HeaderParam("token") String token*/) { 
 

 
\t \t \t return FactoryDao.getIstance().createBaseDao().save(feedback); 
 

 
\t } 
 

 
\t @PUT 
 
\t @Produces(MediaType.APPLICATION_JSON) 
 
\t public void updateFeedback(Feedback feedback) { 
 

 
\t \t \t FactoryDao.getIstance().createBaseDao().update(feedback); 
 

 

 
\t } 
 

 
}

all diese Methoden außer @PUT und @POST perfekt arbeiten. Tatsächlich funktionieren die @ GET-Methoden. Meine Domain-Klasse über diese Klasse ist "Feedback.java" genannt:

package it.jack.fdd.domain; 
 
// Generated 30-nov-2016 0.17.09 by Hibernate Tools 4.3.1.Final 
 

 
import javax.persistence.Column; 
 
import javax.persistence.Entity; 
 
import javax.persistence.FetchType; 
 
import javax.persistence.GeneratedValue; 
 
import static javax.persistence.GenerationType.IDENTITY; 
 
import javax.persistence.Id; 
 
import javax.persistence.JoinColumn; 
 
import javax.persistence.ManyToOne; 
 
import javax.persistence.Table; 
 

 
/** 
 
* Feedback generated by hbm2java 
 
*/ 
 
@Entity 
 
@Table(name = "feedback", catalog = "fdd_dbproducts") 
 
public class Feedback implements java.io.Serializable { 
 

 
\t private Integer idfeedback; 
 
\t private User user; 
 
\t private String message; 
 
\t private boolean read; 
 

 
\t public Feedback() { 
 
\t } 
 

 
\t public Feedback(User user, String message, boolean read) { 
 
\t \t this.user = user; 
 
\t \t this.message = message; 
 
\t \t this.read = read; 
 
\t } 
 

 
\t @Id 
 
\t @GeneratedValue(strategy = IDENTITY) 
 

 
\t @Column(name = "idfeedback", unique = true, nullable = false) 
 
\t public Integer getIdfeedback() { 
 
\t \t return this.idfeedback; 
 
\t } 
 

 
\t public void setIdfeedback(Integer idfeedback) { 
 
\t \t this.idfeedback = idfeedback; 
 
\t } 
 

 
\t @ManyToOne(fetch = FetchType.EAGER) 
 
\t @JoinColumn(name = "fkuser_feedback", nullable = false) 
 
\t public User getUser() { 
 
\t \t return this.user; 
 
\t } 
 

 
\t public void setUser(User user) { 
 
\t \t this.user = user; 
 
\t } 
 

 
\t @Column(name = "message", nullable = false, length = 45) 
 
\t public String getMessage() { 
 
\t \t return this.message; 
 
\t } 
 

 
\t public void setMessage(String message) { 
 
\t \t this.message = message; 
 
\t } 
 

 
\t @Column(name = "read", nullable = false) 
 
\t public boolean isRead() { 
 
\t \t return this.read; 
 
\t } 
 

 
\t public void setRead(boolean read) { 
 
\t \t this.read = read; 
 
\t } 
 

 
}

dies meine Fabrik Klassen ist FactoryDao genannt:

package it.jack.fdd.dao; 
 

 
import it.jack.fdd.dao.impl.AccTypeDaoImpl; 
 
import it.jack.fdd.dao.impl.BaseDaoImpl; 
 
import it.jack.fdd.dao.impl.CapacityDaoImpl; 
 
import it.jack.fdd.dao.impl.CategoryDaoImpl; 
 
import it.jack.fdd.dao.impl.DispenserDaoImpl; 
 
import it.jack.fdd.dao.impl.FamilyDaoImpl; 
 
import it.jack.fdd.dao.impl.FeedbackDaoImpl; 
 
import it.jack.fdd.dao.impl.GeoAreaDaoImpl; 
 
import it.jack.fdd.dao.impl.IndustryDaoImpl; 
 
//import it.jack.fdd.dao.impl.InnerDaoImpl; 
 
import it.jack.fdd.dao.impl.ProducerDaoImpl; 
 
import it.jack.fdd.dao.impl.ProductDaoImpl; 
 
import it.jack.fdd.dao.impl.ProductDescDaoImpl; 
 
import it.jack.fdd.dao.impl.RtDispenserCategoryDaoImpl; 
 
import it.jack.fdd.dao.impl.RtFamilyProductDaoImpl; 
 
import it.jack.fdd.dao.impl.RtIngredientProductDaoImpl; 
 
import it.jack.fdd.dao.impl.RtStaffDispenserDaoImpl; 
 
import it.jack.fdd.dao.impl.StaffDaoImpl; 
 
import it.jack.fdd.dao.impl.StaffLoginDaoImpl; 
 
import it.jack.fdd.dao.impl.StaffTypeDaoImpl; 
 
import it.jack.fdd.dao.impl.TokenStaffDaoImpl; 
 
import it.jack.fdd.dao.interfaces.AccTypeDao; 
 
import it.jack.fdd.dao.interfaces.BaseDao; 
 
import it.jack.fdd.dao.interfaces.CapacityDao; 
 
import it.jack.fdd.dao.interfaces.CategoryDao; 
 
import it.jack.fdd.dao.interfaces.DispenserDao; 
 
import it.jack.fdd.dao.interfaces.FamilyDao; 
 
import it.jack.fdd.dao.interfaces.FeedbackDao; 
 
import it.jack.fdd.dao.interfaces.GeoAreaDao; 
 
import it.jack.fdd.dao.interfaces.IndustryDao; 
 
//import it.jack.fdd.dao.interfaces.InnerDao; 
 
import it.jack.fdd.dao.interfaces.ProducerDao; 
 
import it.jack.fdd.dao.interfaces.ProductDao; 
 
import it.jack.fdd.dao.interfaces.ProductDescDao; 
 
import it.jack.fdd.dao.interfaces.RtDispenserCategoryDao; 
 
import it.jack.fdd.dao.interfaces.RtFamilyProductDao; 
 
import it.jack.fdd.dao.interfaces.RtIngredientProductDao; 
 
import it.jack.fdd.dao.interfaces.RtStaffDispenserDao; 
 
import it.jack.fdd.dao.interfaces.StaffDao; 
 
import it.jack.fdd.dao.interfaces.StaffLoginDao; 
 
import it.jack.fdd.dao.interfaces.StaffTypeDao; 
 
import it.jack.fdd.dao.interfaces.TokenStaffDao; 
 

 
public class FactoryDao { 
 
\t //SINGLETON 
 
\t private FactoryDao() { 
 
\t \t 
 
\t } 
 
\t 
 
\t static class Holder { 
 
\t \t static public final FactoryDao ISTANCE = new FactoryDao(); 
 
\t } 
 
\t 
 
\t private BaseDao basedao = new BaseDaoImpl(); 
 
\t private DispenserDao dispenserdao = new DispenserDaoImpl(); 
 
\t private GeoAreaDao \t geoareadao \t = new GeoAreaDaoImpl(); 
 
\t private ProductDao productdao = new ProductDaoImpl(); 
 
\t private RtIngredientProductDao rtingredientproductdao = new RtIngredientProductDaoImpl(); 
 
\t private StaffDao staffdao = new StaffDaoImpl(); 
 
\t private StaffLoginDao stafflogindao = new StaffLoginDaoImpl(); 
 
\t private StaffTypeDao stafftypedao = new StaffTypeDaoImpl(); 
 
\t private TokenStaffDao tokenstaffdao = new TokenStaffDaoImpl(); 
 
\t private ProductDescDao productdescdao = new ProductDescDaoImpl(); 
 
\t private ProducerDao producerdao = new ProducerDaoImpl(); 
 
\t private FamilyDao familydao = new FamilyDaoImpl(); 
 
\t private RtFamilyProductDao rtfamilyproductdao = new RtFamilyProductDaoImpl(); 
 
\t private CategoryDao categorydao = new CategoryDaoImpl(); 
 
\t private RtDispenserCategoryDao rtdispensercategorydao = new RtDispenserCategoryDaoImpl(); 
 
\t private RtStaffDispenserDao rtstaffdispenserdao = new RtStaffDispenserDaoImpl(); 
 
\t private IndustryDao industrydao = new IndustryDaoImpl(); 
 
\t private CapacityDao capacitydao = new CapacityDaoImpl(); 
 
\t private AccTypeDao acctypedao = new AccTypeDaoImpl(); 
 
\t private FeedbackDao feedbackdao = new FeedbackDaoImpl(); 
 
\t 
 

 
\t public BaseDao createBaseDao(){ 
 
\t \t return basedao; 
 
\t } 
 
\t 
 
\t public DispenserDao createDispenserDao(){ 
 
\t \t return dispenserdao; 
 
\t } 
 
\t 
 
\t public GeoAreaDao createGeoAreaDao(){ 
 
\t \t return geoareadao; 
 
\t } 
 
\t 
 
\t public ProductDao createProductDao(){ 
 
\t \t return productdao; 
 
\t } 
 
\t 
 
\t public RtIngredientProductDao createRtIngredientProductDao(){ 
 
\t \t return rtingredientproductdao; 
 
\t } 
 
\t 
 
\t public StaffDao createStaffDao(){ 
 
\t \t return staffdao; 
 
\t } 
 
\t 
 
\t public StaffLoginDao createStaffLoginDao(){ 
 
\t \t return stafflogindao; 
 
\t } 
 
\t 
 
\t public StaffTypeDao createStaffTypeDao(){ 
 
\t \t return stafftypedao; 
 
\t } 
 
\t 
 
\t public TokenStaffDao createTokenStaffDao(){ 
 
\t \t return tokenstaffdao; 
 
\t } 
 
\t 
 
\t public ProductDescDao createProductDescDao(){ 
 
\t \t return productdescdao; 
 
\t } 
 
\t 
 
\t public ProducerDao createProducerDao(){ 
 
\t \t return producerdao; 
 
\t } 
 
\t 
 
\t public FamilyDao createFamilyDao(){ 
 
\t \t return familydao; 
 
\t } 
 
\t 
 
\t public RtFamilyProductDao createRtFamilyProductDao(){ 
 
\t \t return rtfamilyproductdao; 
 
\t } 
 
\t 
 
\t public CategoryDao createCategoryDao(){ 
 
\t \t return categorydao; 
 
\t } 
 
\t 
 
\t public RtDispenserCategoryDao createRtDispenserCategoryDao(){ 
 
\t \t return rtdispensercategorydao; 
 
\t } 
 
\t 
 
\t public RtStaffDispenserDao createRtStaffDispenserDao(){ 
 
\t \t return rtstaffdispenserdao; 
 
\t } 
 
\t 
 
\t public IndustryDao createIndustryDao(){ 
 
\t \t return industrydao; 
 
\t } 
 
\t \t 
 
\t public CapacityDao createCapacityDao(){ 
 
\t \t return capacitydao; 
 
\t } 
 
\t 
 
\t public AccTypeDao createAccTypeDao(){ 
 
\t \t return acctypedao; 
 
\t } 
 
\t 
 
\t public FeedbackDao createFeedbackDao(){ 
 
\t \t return feedbackdao; 
 
\t } 
 
\t 
 
\t public static FactoryDao getIstance() { 
 
\t \t return Holder.ISTANCE; 
 
\t } 
 

 
}

(I Sie müssen Implementierungen nicht wie in anderen Klassen aktualisieren und einfügen rk)

Zum Beispiel habe ich meine GET-Methode versuchen, ich habe diese JSON-Datei:

[ 
 
    { 
 
    "idfeedback": 1, 
 
    "user": { 
 
     "iduser": 1, 
 
     "name": "Andrea", 
 
     "surname": "Pirlo", 
 
     "birthDate": "1980-12-12", 
 
     "cityResidence": "Cannole", 
 
     "provinceResidence": "Lecce", 
 
     "postalCode": "73020", 
 
     "gender": true, 
 
     "bankAccounts": [], 
 
     "userLogin": { 
 
     "iduserLogin": 1, 
 
     "email": "[email protected]", 
 
     "pass": "asdasd5sada5adsdsadasdas6dsa6da5dadad", 
 
     "tokenUser": null 
 
     } 
 
    }, 
 
    "message": "migliorare controlli", 
 
    "read": false 
 
    }, 
 
    { 
 
    "idfeedback": 2, 
 
    "user": { 
 
     "iduser": 1, 
 
     "name": "Andrea", 
 
     "surname": "Pirlo", 
 
     "birthDate": "1980-12-12", 
 
     "cityResidence": "Cannole", 
 
     "provinceResidence": "Lecce", 
 
     "postalCode": "73020", 
 
     "gender": true, 
 
     "bankAccounts": [], 
 
     "userLogin": { 
 
     "iduserLogin": 1, 
 
     "email": "[email protected]", 
 
     "pass": "asdasd5sada5adsdsadasdas6dsa6da5dadad", 
 
     "tokenUser": null 
 
     } 
 
    }, 
 
    "message": "sdfsdf", 
 
    "read": false 
 
    } 
 
]

Ich möchte das erste Element in dieser Art und Weise bearbeiten:

{ 
 
    "idfeedback": 1, 
 
    "user": { 
 
     "iduser": 1, 
 
     "name": "Andrea", 
 
     "surname": "Pirlo", 
 
     "birthDate": "1980-12-12", 
 
     "cityResidence": "Cannole", 
 
     "provinceResidence": "Lecce", 
 
     "postalCode": "73020", 
 
     "gender": true, 
 
     "bankAccounts": [], 
 
     "userLogin": { 
 
     "iduserLogin": 1, 
 
     "email": "[email protected]", 
 
     "pass": "asdasd5sada5adsdsadasdas6dsa6da5dadad", 
 
     "tokenUser": null 
 
     } 
 
    }, 
 
    "message": "update", 
 
    "read": true 
 
    }

die Antwort 204 (es ist in Ordnung), aber es ist nichts passiert: enter image description here enter image description here

Ich verstehe nicht, was der Grund ist.

+0

Ich kann Sie sehen @Products bei der Post und setzen Typ Anfrage, warum? Aber Konvention ist Annotation verbraucht für Post-oder Put-Typ Anfrage. – atiqkhaled

+0

Entschuldigung, ich habe das gelöst. Jetzt antworte ich mit der Lösung –

Antwort

0

Gelöst. Das Problem ist, weil "gelesen". "Lesen" ist auch eine Systemvariable von mySql. Gelöst, es umzubenennen