Я использую весеннюю загрузку и использую select new return dto, потому что я не хочу возвращать свою сущность. Но когда я возвращаю список, он не работает. Это бросило мне исключение:
"timestamp": "2019-05-14T14:06:06.762+0000",
"status": 500,
"error": "Internal Server Error",
"message": "No converter found capable of converting from type [com.abc.demospringjpa.dto.CategoryResDto] to type [com.abc.demospringjpa.model.CategoryResDtoList]",
Категория Модель.
package com.abc.demospringjpa.model;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.RequiredArgsConstructor;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import java.io.Serializable;
@Data
@Entity
@AllArgsConstructor
@NoArgsConstructor
//@RequiredArgsConstructor
public class Category implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String name;
private String type;
}
контроллер.
@RestController
@RequestMapping("/api/v1/categories")
public class CategoryController {
@Autowired
private CategoryService categoryService;
//
// @GetMapping
// public ResponseEntity<?> getAllCategory() {
// return new ResponseEntity<>(categoryService.findAllCategory(), HttpStatus.OK);
// }
@GetMapping("/{id}")
@ResponseStatus(HttpStatus.OK)
public CategoryResDto findCategoryByName(@PathVariable("id")Long id) {
return categoryService.findCategoryByName(id);
}
@GetMapping
@ResponseStatus(HttpStatus.OK)
public ResponseEntity<?> findCategoryByName(@RequestParam("type")String type) {
return new ResponseEntity<>(categoryService.findCategoryByType(type), HttpStatus.OK);
}
//
// @GetMapping
// public ResponseEntity<?> saveCategory() {
// return new ResponseEntity<>(categoryService.saveCa(), HttpStatus.OK);
// }
}
Услуги
public interface CategoryService {
List<CategoryResDto> findAllCategory();
CategoryResDto findCategoryByName(Long name);
CategoryResDtoList findCategoryByType(String type);
// CategoryResDto saveCategory(Category category);
}
ServiceImpl
@Service
public class CategoryServiceImpl implements CategoryService {
final
CategoryRepository categoryRepository;
final
CategoryMapper categoryMapper;
@Autowired
public CategoryServiceImpl(CategoryRepository categoryRepository, CategoryMapper categoryMapper) {
this.categoryRepository = categoryRepository;
this.categoryMapper = categoryMapper;
}
@Override
public List<CategoryResDto> findAllCategory() {
return categoryRepository.findAll().stream().
map(categoryMapper::categoryToCategoryDto).collect(Collectors.toList());
}
@Override
public CategoryResDto findCategoryByName(Long id) {
return categoryRepository.findAllCategoryById(id);
}
@Override
public CategoryResDtoList findCategoryByType(String type) {
return categoryRepository.findAllCategoryResponseDto(type);
}
}
Repository.
@Repository
public interface CategoryRepository extends JpaRepository<Category,Long> {
@Query(value = "Select new com.abc.demospringjpa.dto.CategoryResDto(c.name) from Category c where c.id = :id")
CategoryResDto findAllCategoryById(@Param("id") Long id);
@Query(value = "Select new com.abc.demospringjpa.dto.CategoryResDto(c.name) from Category c where c.type = :type")
CategoryResDtoList findAllCategoryResponseDto(@Param("type")String type);
}
CategoryRes:
@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
@RequiredArgsConstructor
//@NoArgsConstructor
@AllArgsConstructor
public class CategoryResDto {
@JsonProperty("category_name")
private String name;
}
CategoryResList:
@RequiredArgsConstructor
@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
public class CategoryResDtoList {
private List<CategoryResDto> categoryResDtos;
}
Я хочу вернуть CategoryResDtoList, потому что он содержит CategoryResDto. Возможно ? Когда я извиняюсь и вызываю метод, он выдает мне исключение:
"timestamp": "2019-05-14T14:06:06.762+0000",
"status": 500,
"error": "Internal Server Error",
"message": "No converter found capable of converting from type [com.abc.demospringjpa.dto.CategoryResDto] to type [com.abc.demospringjpa.model.CategoryResDtoList]",
У меня есть вопрос: как с помощью Select new вернуть вместо моего DTO CategoryResDtoList List<CategoryResDto
>, потому что я хочу, чтобы пользовательские сообщения возвращали