• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Spring Boot payload

Object Storage Arubacloud
0 głosów
549 wizyt
pytanie zadane 1 sierpnia 2020 w Java przez Szyszka Gaduła (3,490 p.)
Witam. W klasie Order oraz OrderController na zmiane pokazuje się błąd przy słówku package. Błąd brzmi tak:

The type jakarta.validation.Payload cannot be resolved. It is indirectly referenced from required .class files

Jak to naprawić?
komentarz 2 sierpnia 2020 przez mbabane Szeryf (79,280 p.)
Jak odpalasz projekt i jaką wersję spring'a/spring boota używasz?
komentarz 2 sierpnia 2020 przez Szyszka Gaduła (3,490 p.)
W Visual Studio Code klikam F5, w "Select Environment" wybieram Java. Wersja Spring Boota to 2.3.2.RELEASE

2 odpowiedzi

0 głosów
odpowiedź 1 sierpnia 2020 przez Wiciorny Ekspert (270,110 p.)
wybrane 2 sierpnia 2020 przez Szyszka
 
Najlepsza

 jakarta.validation.Payload stosujesz Payload z bilbioteki JEE, pracując w springu ? Sprwadź czy poprawny import zrobiłeś. 

Springowy Payload ma inny import. 
https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/messaging/handler/annotation/Payload.html

komentarz 2 sierpnia 2020 przez Szyszka Gaduła (3,490 p.)

Właśnie nie importuję Payload, w tym jest problem. Cały kod jest z książki, i wygląda tak:

Order.java

package tacos;

import javax.validation.constraints.Digits;
import javax.validation.constraints.Pattern;
import org.hibernate.validator.constraints.CreditCardNumber;
import javax.validation.constraints.NotBlank;

import lombok.Data;

@Data
public class Order {
       @NotBlank(message = "Podanie imienia i nazwiska jest obowiązkowe")
       private String name;

       @NotBlank(message = "Podanie ulicy jest obowiązkowe")
       private String street;

       @NotBlank(message = "Podanie miejscowości jest obowiązkowe")
       private String city;

       @NotBlank(message = "Podanie województwa jest obowiązkowe")
       private String state;

       @NotBlank(message = "Podanie kodu pocztowego jest obowiązkowe")
       private String zip;

       @CreditCardNumber(message = "To nie jest prawidłowy numer karty kredytowej")
       private String ccNumber;
       @Pattern(regexp = "^(0[1-9]|1[0-2])([\\/])([1-9][0-9])$", message = "Wartość musi być w formacie MM/RR")
       private String ccExpiration;

       @Digits(integer = 3, fraction = 0, message = "Nieprawidłowy kod CVV.")
       private String ccCVV;
}

A OrderController tak:

package tacos.web;

import javax.validation.Valid;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.Errors;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;

import lombok.extern.slf4j.Slf4j;

@Slf4j
@Controller
@RequestMapping("/orders")
public class OrderController {
       
       @GetMapping("current")
       public String orderForm(Model model){
              model.addAttribute("order", new tacos.Order());
              return "orderForm";
       }

       @PostMapping
       public String processOrder(@Valid tacos.Order order, Errors errors){
              if(errors.hasErrors()){
                     return "orderForm";
              }
              
              log.info("Zamówienie zostało złożone: " + order);
              return "redirect:/";
       }
}

W Order.java błąd wyskakuje po dodaniu importu: 

import org.hibernate.validator.constraints.CreditCardNumber;

A w OrderController.java pojawia się on bez względu na importy.

Tak wygląda pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.3.2.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>sia</groupId>
	<artifactId>taco-cloud</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>taco-cloud</name>
	<description>Aplikacja Taco Cloud</description>

	<properties>
		<java.version>14</java.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-thymeleaf</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-devtools</artifactId>
			<scope>runtime</scope>
			<optional>true</optional>
		</dependency>
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<optional>true</optional>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
			<exclusions>
				<exclusion>
					<groupId>org.junit.vintage</groupId>
					<artifactId>junit-vintage-engine</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
		<dependency>
			<groupId>javax.validation</groupId>
			<artifactId>validation-api</artifactId>
			<version>2.0.1.Final</version>
		</dependency>
		   <dependency>
			<groupId>org.hibernate.validator</groupId>
			<artifactId>hibernate-validator</artifactId>
			<version>7.0.0.Alpha6</version>
		   </dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>

</project>

 

komentarz 2 sierpnia 2020 przez Wiciorny Ekspert (270,110 p.)

6.1.0.Final ZMIEN NA TA WERSJE WALIDATORA, a nie w wersji aplha, ktora moze tego nie wspierac 

<!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-validator -->
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>6.1.0.Final</version>
</dependency>

 

komentarz 2 sierpnia 2020 przez Szyszka Gaduła (3,490 p.)
Działa, dzięki :)
0 głosów
odpowiedź 2 sierpnia 2020 przez mbabane Szeryf (79,280 p.)

Gdzieś mieszają się zależności te z Java EE i Jakarta EE. Strzelam że ta:

 <dependency>
    <groupId>javax.validation</groupId>
     <artifactId>validation-api</artifactId>
     <version>2.0.1.Final</version>
 </dependency>

Spróbuj wymienić ją na tą (lub nowszą):

<dependency>
    <groupId>jakarta.validation</groupId>
    <artifactId>jakarta.validation-api</artifactId>
    <version>2.0.2</version>
</dependency>

https://mvnrepository.com/artifact/jakarta.validation/jakarta.validation-api

A jeśli to niewiele pomoże to przepatrz pomy jakich użył autor Spring w akcji i zrób je 1:1 (chyba jest użyta wersja 2.0.4 spring boot'a.):

https://github.com/habuma/spring-in-action-5-samples

https://github.com/habuma/spring-in-action-5-samples/blob/master/ch01/tacos/pom.xml

(Nie mam pojęcia tylko czy powyższe repo jest oficjalne Spring in Action, jeśli masz wątpliwości to pobierz źródła stąd: https://www.manning.com/books/spring-in-action-fifth-edition )

komentarz 2 sierpnia 2020 przez Szyszka Gaduła (3,490 p.)
Próbowałem, to nic nie dało. Sprawdziłem za to, co się stanie, jeśli spróbuje odpalić ten projekt w intellij idea ultimate 30-dniowej próbnej wersji. Żaden błąd nie wyskoczył, i wszystko się uruchomiło poprawnie. W Visual Studio Code pojawił się również taki błąd:

The project was not built since its build path is incomplete. Cannot find the class file for jakarta.validation.Payload. Fix the build path then try building this project
komentarz 2 sierpnia 2020 przez Wiciorny Ekspert (270,110 p.)

@mbabane, to nie ten import, ale ten hibernatowy ttrzeba zmienic bo pakiet nie idzie z validation api tylko hibernate validator 

<!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-validator -->
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>6.1.0.Final</version>
</dependency>

 

Podobne pytania

0 głosów
1 odpowiedź 328 wizyt
pytanie zadane 13 czerwca 2023 w Java przez Mikołaj Pątkowski Użytkownik (530 p.)
0 głosów
1 odpowiedź 213 wizyt
pytanie zadane 13 maja 2023 w Java przez mm Użytkownik (890 p.)
0 głosów
1 odpowiedź 145 wizyt
pytanie zadane 16 kwietnia 2023 w Java przez mm Użytkownik (890 p.)

92,572 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,959 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...