конвертер UUID spring boot

#spring-boot #converters

#spring-boot #конвертеры

Вопрос:

Версия Spring boot: 2.4.0

Класс конвертера

 import java.util.UUID;
import org.springframework.core.convert.converter.Converter;
import org.springframework.lang.NonNull;
import org.springframework.stereotype.Component;

@Component 
public class StringToUuidConverter implements Converter<String, UUID> { 
    @Override
    public UUID convert(@NonNull String uuid) {
        return  UUID.fromString(uuid);
    }
}
 

контроллер

 ....
@Autowired
    TestRepos testRepos;
    
    @RequestMapping("test")
    public Task t( UUID uuid) {
        
        return this.testRepos.findById(uuid).orElse(null);
    }
 ....
 

вызовите контроллер с
http://localhost:9090/test?uuid=0459828a-a630-491d-80b9-ab9a412f066e

журнал ошибок

 "error": "Bad Request",
    "trace": "org.springframework.web.method.annotation.ModelAttributeMethodProcessor$1: org.springframework.validation.BeanPropertyBindingResult: 2 errorsnField error in object 'UUID' on field 'mostSigBits': rejected value [null]; codes [typeMismatch.UUID.mostSigBits,typeMismatch.mostSigBits,typeMismatch.long,typeMismatch];
 

Какая-либо конфигурация пропущена?

Ответ №1:

Попробуйте:

 public Task t(@RequestParam UUID uuid) {
    // ...
}
 

Любой другой аргумент:

Если аргумент метода не соответствует ни одному из предыдущих значений в этой таблице и является простым типом (как определено BeanUtils#isSimpleProperty , он разрешен как @RequestParam . В противном случае он разрешается как @ModelAttribute .

Кроме того, вам не нужно создавать StringToUuidConverter класс самостоятельно. Он уже включен.