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:
Ich verstehe nicht, was der Grund ist.
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
Entschuldigung, ich habe das gelöst. Jetzt antworte ich mit der Lösung –