Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Internal 500 on .findAll() #4863

Closed
robertlocskai opened this issue Dec 23, 2024 · 3 comments
Closed

Internal 500 on .findAll() #4863

robertlocskai opened this issue Dec 23, 2024 · 3 comments
Labels
status: waiting-for-feedback We need additional information before we can continue

Comments

@robertlocskai
Copy link

robertlocskai commented Dec 23, 2024

Hey, I just made a class called Project, have a repository, controller and a service. I will attach these below but first I'll try to explain my issue. So I basically made a project controller where I wanna create, and findbyid, findbyownerid and list all projects. (First i just wanted create and findbyownerid, i added the others to test). My issue is that the create works fine with the .save(). It saves it in mongodb all fine. But on any get request i get a 500 Internal Error.

This is the log for getallprojects for example:
2024-12-23T22:14:09.579+01:00 DEBUG 9475 --- [cms] [nio-8080-exec-4] o.s.web.servlet.DispatcherServlet : GET "/project/", parameters={} 2024-12-23T22:14:09.580+01:00 DEBUG 9475 --- [cms] [nio-8080-exec-4] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped to com.globytes.cms.contollers.ProjectController#getAll() 2024-12-23T22:14:09.596+01:00 DEBUG 9475 --- [cms] [nio-8080-exec-4] .m.m.a.ExceptionHandlerExceptionResolver : Using @ExceptionHandler com.globytes.cms.exception.GlobalExceptionHandler#handleException(Exception) 2024-12-23T22:14:09.596+01:00 DEBUG 9475 --- [cms] [nio-8080-exec-4] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Using 'application/json', given [*/*] and supported [application/json, application/*+json] 2024-12-23T22:14:09.597+01:00 DEBUG 9475 --- [cms] [nio-8080-exec-4] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Writing [com.globytes.cms.exception.ExceptionResponse@407f96c6] 2024-12-23T22:14:09.598+01:00 WARN 9475 --- [cms] [nio-8080-exec-4] .m.m.a.ExceptionHandlerExceptionResolver : Resolved [org.springframework.data.mapping.MappingException: Parameter org.springframework.data.mapping.Parameter@31acf732 does not have a name] 2024-12-23T22:14:09.598+01:00 DEBUG 9475 --- [cms] [nio-8080-exec-4] o.s.web.servlet.DispatcherServlet : Completed 500 INTERNAL_SERVER_ERROR

Response in Postman:
{ "message": "An error occurred", "error": "Internal Server Error", "status": 500 }

My Project class:

`import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.Field;

import com.fasterxml.jackson.annotation.JsonProperty;

import lombok.Data;

@DaTa
@document(collection="projects")
public class Project {

@Id
String id;


@JsonProperty("ownerId")
@Field(value = "ownerId")
private String ownerId;


@JsonProperty("name")
@Field(value = "name")
private String name;


public Project(String ownerId, String name) {
	super();
	this.ownerId = ownerId;
	this.name = name;
}


public String getId() {
	return id;
}


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


public String getOwnerId() {
	return ownerId;
}


public void setOwnerId(String ownerId) {
	this.ownerId = ownerId;
}


public String getName() {
	return name;
}


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

}
`

My project repository:
`import java.util.List;

import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;

import com.globytes.cms.models.Project;

@repository
public interface ProjectRepository extends MongoRepository<Project, String> {

default Project getById(String id) {
	return findById(id).orElse(null);
}

public List<Project> findByOwnerId(@Param("ownerId") String ownerId);

}

`

My project service:
`import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;

import com.globytes.cms.models.Project;
import com.globytes.cms.models.dtos.ProjectRequest;
import com.globytes.cms.repositories.ProjectRepository;

import jakarta.servlet.http.Cookie;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.validation.Valid;

@service
public class ProjectService {

@Autowired
ProjectRepository projectRepository;
@Autowired
JwtService jwtService;

public ResponseEntity<Project> create(@Valid ProjectRequest project, HttpServletRequest request) {
	Cookie[] cookies = request.getCookies();
    String token = null;
    if (cookies != null) {
        for (Cookie cookie : cookies) {
            if ("jwtToken".equals(cookie.getName())) {
                token = cookie.getValue();
                break;
            }
        }
    }
    
    if (token == null) {
        return new ResponseEntity<>(HttpStatus.UNAUTHORIZED);
    }
    
    String id = jwtService.getId(token);
    
    if(id == null)
    	return new ResponseEntity<>(HttpStatus.UNAUTHORIZED);
    
    Project _project = new Project(id, project.getName());
    
    
    Project savedProject = projectRepository.save(_project);
    
	
	return new ResponseEntity<Project>(savedProject, HttpStatus.CREATED);
}

public ResponseEntity<List<Project>> getUserProjects(HttpServletRequest request) {
	Cookie[] cookies = request.getCookies();
    String token = null;
    if (cookies != null) {
        for (Cookie cookie : cookies) {
            if ("jwtToken".equals(cookie.getName())) {
                token = cookie.getValue();
                break;
            }
        }
    }
    
    if (token == null) {
        return new ResponseEntity<>(HttpStatus.UNAUTHORIZED);
    }
    
    String id = jwtService.getId(token);
    
    if(id == null)
    	return new ResponseEntity<>(HttpStatus.UNAUTHORIZED);
   
    List<Project> projects = projectRepository.findAll();
    
    return new ResponseEntity<List<Project>>(projects, HttpStatus.OK);
}

public ResponseEntity<Project> getProject(String id) {
	if(id != null) {
		Project project = projectRepository.getById(id);

		return new ResponseEntity<Project>(project, HttpStatus.OK);
	}
	else
		return new ResponseEntity<>(null, HttpStatus.OK);
	
	
}

public ResponseEntity<List<Project>> getAll() {
	return new ResponseEntity<>(projectRepository.findAll(), HttpStatus.OK);
}

}`

And I'm not attaching the controller since its just a return of the service methods.

Any help is appreciated but im literally going insane, i have no idea what is wrong, I've tried everything I could think of.

Thanks

@spring-projects-issues spring-projects-issues added the status: waiting-for-triage An issue we've not yet triaged label Dec 23, 2024
@robertlocskai
Copy link
Author

Also I already have other classes like "Plan" which has the same findById too, and it works all good. Spring boot makin me mad for real rn

@christophstrobl
Copy link
Member

This looks like you need to make sure to configure the compiler to use the -parameters flag.
See also Spring Framework 6.0 Release Notes.

If that does not work and you'd like us to spend some time investigating, please take the time to provide a complete minimal sample (something that we can unzip or git clone, build, and deploy) that reproduces the problem.

@christophstrobl christophstrobl added status: waiting-for-feedback We need additional information before we can continue and removed status: waiting-for-triage An issue we've not yet triaged labels Dec 28, 2024
@robertlocskai
Copy link
Author

Well it was an issue with lombok and eclipse. Switched to IntelliJ, cleaned up stuff and it just suddenly worked lol.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
status: waiting-for-feedback We need additional information before we can continue
Projects
None yet
Development

No branches or pull requests

3 participants