No validator could be found for type: java.lang.Integer

17,111

I believe problem is with this:

@NotNull
@Length(min = 4, max = 4)
@Column(name = "CODE", unique = true, nullable = false)
private Integer code;

@Length annotation should be used only for String not Integer

Share:
17,111
Rafael
Author by

Rafael

Android / Kotlin Java / SPRING Fascinated by things we can't touch.

Updated on June 04, 2022

Comments

  • Rafael
    Rafael almost 2 years

    Trying to process my create/edit form I get the following error:

    HTTP Status 500 - Request processing failed; nested exception is javax.validation.UnexpectedTypeException: HV000030: No validator could be found for type: java.lang.Integer.

    My Controller:

    /**
     * This method will provide the medium to update an existing Game.
     *
     * @param id bla
     * @param model bla
     * @return bla
     */
    @RequestMapping(value = {"/edit?id={id}"}, method = RequestMethod.GET)
    public String initEditGame(
            @PathVariable int id,
            ModelMap model
    ) {
        Game game = gameService.findById(id);
    
        model.addAttribute("game", game);
        model.addAttribute("edit", true);
        return "host/games/createOrUpdate";
    }
    
    /**
     * This method will be called on form submission, handling POST request for
     * updating game in database. It also validates the user input
     *
     * @param game bla
     * @param id bla
     * @param result bla
     * @param model bla
     * @param locale blie
     * @return bloe
     */
    @RequestMapping(value = {"/edit?id={id}"}, method = RequestMethod.POST)
    public String processEditGame(
            @ModelAttribute("game") @Valid Game game,
            BindingResult result,
            ModelMap model,
            @PathVariable int id,
            Locale locale
    ) {
    
        if (result.hasErrors()) {
            return "host/games/createOrUpdate";
        }
    
        gameService.update(game);
    
        model.addAttribute("success", "Game " + game.getName() + " updated successfully");
        return "host/games/createGameSucces";
    
    }
    

    My model class:

    @Entity
    @Table(name = "GAME")
    public class Game implements Serializable {
    
        @Id
        @Column(name = "ID")
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private Integer id;
    
        @NotEmpty
        @Column(name = "NAME", unique = true, nullable = false)
        private String name;
    
        @NotEmpty
        @Column(name = "DESCRIPTION", nullable = false)
        private String description;
    
        @NotNull
        @Length(min = 4, max = 4)
        @Column(name = "CODE", unique = true, nullable = false)
        private Integer code;
    
        @NotNull
        @Temporal(javax.persistence.TemporalType.DATE)
        @Column(name = "CREATED")
        @DateTimeFormat(pattern = "yyyy/MM/dd")
        private Date created;
    
        @NotNull
        @Column(name = "STATE", nullable = false)
        private String state = State.ACTIVE.getState();
    
        /**
         *
         */
        public Game() {
        }
    
        /**
         *
         * @param name bla
         * @param description bleh
         */
        public Game(String name, String description) {
            this.name = name;
            this.description = description;
            this.code = generateRoomNumber();
        }
    

    Any suggestions?