0

I have this NullPointerException runtime exception, so I suspect that it's my getter method in the entity that's not working. But I am not sure, and I don't know how to fix it. Please kindly correct me if you could.

I am now using Java as Backend to accept the frontend request.

A. I looked for the 1. official documents :https://docs.oracle.com/javase/8/docs/api/java/lang/NullPointerException.html, 2. How to solve java.lang.NullPointerException error? 3. NullPointerException on calling getter method

B. I was expecting to see the printing result of user.getUsername() and opinion.getCollaboratorName(), but I only got the previous one. The 'opinion.getCollaboratorName() is null' is just not clear to me.

  1. This is my controller:
@RestController
@RequestMapping("/forum"){

 private final JwtDecoder jwtDecoder;
    private final UserServiceImpl userServiceImpl;
    private final OpinionsRepository opinionsRepository;

    @Autowired
    //constructor
    public OpinionsController(JwtDecoder jwtDecoder, UserServiceImpl userServiceImpl, OpinionsRepository opinionsRepository) {
        this.jwtDecoder = jwtDecoder;
        this.userServiceImpl = userServiceImpl;
        this.opinionsRepository = opinionsRepository;
    }


@PutMapping("/opinions")
 public ResponseEntity<?> updateOpinion(**@RequestBody Opinion opinion**, @CookieValue(name = "dashboardToken", required = true) String dashboardToken, HttpServletResponse response) {
        System.out.println("Java 3 at putmapping/opinions to edit individual posts,outside try, {id}" + **opinion.toString()**);
        try {
            System.out.println("Printing out the @RequestBody Opinion");
            **System.out.println(opinion);**
            System.out.println("Java 4 inside try put mapping");
            String username = jwtDecoder.decodeUserInfoFromDashboardToken(dashboardToken);
            System.out.println("email in PutMapping Opinions:" + username);
            System.out.println("OpinionID in PutOpinions id:");
            System.out.println(opinion.getId());
            User user = userServiceImpl.findUserByEmail(email);  //User is an Entity
            **System.out.println("opinion.getCollaboratorName()");
            System.out.println(opinion.getCollaboratorName());**//how is this possible??

            if (!Objects.equals(user.getUsername(), opinion.getCollaboratorName())) {
                return ResponseEntity.status(HttpStatus.FORBIDDEN).body("The Collaborator does not correspond with the author of the article in the Database. Please contact us.");
            }

            response.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE,OPTIONS");
            response.addHeader("Access-Control-Allow-Headers", "origin, content-type, accept");
            //response.addHeader("Access-Control-Allow-Origin", "http://localhost:3000");
            //response.addHeader("Access-Control-Allow-Credentials", "true");
            response.addHeader("Access-Control-Expose-Headers", "loginToken");
            response.addHeader("Access-Control-Max-Age", "3600");
            System.out.println("Hey!!!This is the response from putmapping,process almost done:" + response.toString());
            return new ResponseEntity<Opinion>(opinionsRepository.save(opinion), HttpStatus.OK);
        } catch (UserNotFoundException e) {
            return ResponseEntity.status(HttpStatus.FORBIDDEN).body("The Collaborator does not correspond with the author of the article in the Database. Please contact us.");
        } catch (Exception e) {
            System.out.println("Oops, something went wrong. at getmapping opinions line 55");
            e.printStackTrace();
            return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(Collections.emptyList());
        }
    } 
}
  1. This is my Entity called "Opinion"
@Entity
@Table(name="opinion")
public class Opinion {
    @Id
    @GeneratedValue(strategy= GenerationType.IDENTITY)
    private Long id;

    @Column(name="collaborator_name",nullable=false)
    private String collaboratorName;

    @Column(nullable=false)
    private String title;

    @Column(nullable=false)
    private String body;

    @Column(nullable=false)
    private String category;

    @Column(name="updated_at")
    @UpdateTimestamp
    private Date updatedAt;

    @Column(name="created_at",nullable=false,updatable=false)
    @CreationTimestamp
    private Date createdAt;

    public Long getId() {
        return id;
    }

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

    public void setCollaboratorName(String collaboratorName) {
        this.collaboratorName = collaboratorName;
    }

**    public String getCollaboratorName() {
        return collaboratorName;
    }**

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getBody() {
        return body;
    }

    public void setBody(String body) {
        this.body = body;
    }

    public String getCategory() {
        return category;
    }

    public void setCategory(String category) {
        this.category = category;
    }

    public Date getCreatedAt() {
        return createdAt;
    }

    public void setCreatedAt(Date createdAt) {
        this.createdAt = createdAt;
    }

    public Date getUpdatedAt() {
        return updatedAt;
    }

    public void setUpdatedAt(Date updatedAt) {
        this.updatedAt = updatedAt;
    }


    @Override
    public String toString() {
        return "Opinion{" +
                "id=" + id +
                ", collaboratorName='" + collaboratorName + '\'' +
                ", title='" + title + '\'' +
                ", body='" + body + '\'' +
                ", category='" + category + '\'' +
                ", updatedAt=" + updatedAt +
                ", createdAt=" + createdAt +
                '}';
    }
}
  1. This is what the Java Console shows:
Java 3 at putmapping/opinions to edit individual posts,outside try, {id}Opinion{id=8, **collaboratorName='null'**, title='Hi there', body='Opps I hope it wrks', category='gender equality', updatedAt=Tue Jul 04 14:19:12 CST 2023, createdAt=Tue Jul 04 14:19:12 CST 2023}
Printing out the @RequestBody Opinion
Opinion{id=8, **collaboratorName='null'**, title='Hi there', body='Opps I hope it wrks', category='gender equality', updatedAt=Tue Jul 04 14:19:12 CST 2023, createdAt=Tue Jul 04 14:19:12 CST 2023}
Opinion{id=8, **collaboratorName='null'**, title='Hi there', body='Opps I hope it wrks', category='gender equality', updatedAt=Tue Jul 04 14:19:12 CST 2023, createdAt=Tue Jul 04 14:19:12 CST 2023}
Java 4 inside try put mapping
Hi This is from decodeUserInfoFromDashboardToken in JwtDecoder, and the Claims are:
{sub=Stasy, opinionsList=[{id=8, **collaboratorName=Stasy**, title=Hi there, body=Opps I hope it wrks, category=gender equality, updatedAt=1688451552464, createdAt=1688451552464}, {id=9, collaboratorName=Stasy, title=Now Tuesday, body=Hi there, TUesday again, category=gender equality, updatedAt=1688451787036, createdAt=1688451787036}, {id=10, collaboratorName=Stasy, title=11th Revolution, body=I hope this time it works, category=gender equality, updatedAt=1688452876627, createdAt=1688452876627}], email=t.hsuanhsieh@gmail.com, password=1128, username=Stasy, iat=1688628751}
**result from getUserInfoFromLoginToken:Stasy
username in PutMapping Opinions:Stasy**
OpinionID in PutOpinions id:
8
Hibernate: select u1_0.userid,u1_0.email,u1_0.password,u1_0.username from users u1_0 where u1_0.email=?
**opinion.getCollaboratorName()
null** 
  • I don't really see a NullPointerException mentioned in your logs – Stultuske Jul 06 '23 at 10:07
  • Read the first line of the error and it seems to relate to constructing the requests' REST mapping and mentions null as the value on a collaborator name AND note the collaboratorName variable is marked to not allow null with its annotation! – Samuel Marchant Jul 06 '23 at 10:16
  • Please post the full stack trace of the exception. – tgdavies Jul 06 '23 at 10:20
  • Hi @Stultuske, thank you for your pointing out. At some point it showed NullPointerException but my computer crushed, so I removed the log as well, as I am still figuring it out. – Tsai Hsuan Hsieh Jul 06 '23 at 10:42
  • Hi @SamuelMarchant, first of all, thank you so much for taking the time to simply read my question! I really appreciate it. What you said is exactly why I got so confused. I also checked my database, and the username(backend)==collaboratorname(frontend) is not null, they indeed have values. – Tsai Hsuan Hsieh Jul 06 '23 at 10:45
  • Hi @tgdavies, I'll post the trace as soon as my IntelliJ gets back to work. Thank you! – Tsai Hsuan Hsieh Jul 06 '23 at 10:45

0 Answers0