我是 jEE 新手,这是我第一个使用 spring 的 jEE 代码。下面的代码工作正常。当我转到本地主机时,他只是打印字符串索引;否则他会打印处理错误。
我的问题是:如果我使用
@Controller
而不是 @RestController
,为什么这段代码不再起作用
我在 spring 的文档中找不到任何简单的解释,我希望有人可以解释这一点。
我有一种感觉,如果没有 thymeleaf 之类的东西,单独的控制器就无法工作(我知道如果我使用 thymeleaf,字符串索引将被资源文件夹中的索引页替换),其中 RestController 可能会以 xml 或json 或其他东西。
谢谢
@RestController
public class HelloController implements ErrorController {
@RequestMapping("/")
public String index() {
return "index";
}
@RequestMapping("/error")
public String error() {
return "gestion erreur";
}
@Override
public String getErrorPath() {
return "/error";
}
}
@Controller
的工作是创建模型对象的Map并查找视图,但@RestController
只是返回对象,对象数据直接以JSON或XML形式写入HTTP响应。
@Controller
是一个常见的注释,用于将类标记为Spring MVC控制器,而@RestController
是RESTFul Web服务中使用的特殊控制器,相当于@Controller
+ @ResponseBody
。
如果您想要与
@RestController
相同的功能而不使用它,您可以使用 @Controller
和 @ResponseBody
。
@Controller
public class HelloController{
@RequestMapping("/")
@ResponseBody
public String index() {
return "index";
}
}
This is how I get something:
Part in @RestController:
@GetMapping("getSomething")
public ResponseEntity<?> getSomething(){
return ResponseEntity.status(HttpStatus.OK).body(service.getSomeTHing());
}
Part in @Service:
public List<SomethingDTO> getSomething(){
List<Something> somethings = sr.findAll();
List<SomethingDTO> somethingsDTO = new LinkedList<>();
for (Something s: somethings) {
SomethingsDTO dto = new SomethingsDTO();
BeanUtils.copyProperties(p, dto);
somethingsDTO.add(dto);
}
return somethingsDTO;
}
And this is how I save something:
RestController:
@PostMapping("saveSomethings")
public ResponseEntity<?> saveSomething(SomethingDTO something){
if (something.getSomething() == "") {
throw new EmptyFieldsException("No fields can be empty.");
}
if (glumac.getSomething().length() != 7)
throw new InvalidLengthException("Length must be 7", somethings.getSomething().length());
Integer idNewSomething = service.saveSomething(something);
if (idNewSomething == -1)
throw new SavingErrorException("Error while saving into database.");
return ResponseEntity.ok("Success, new id is: "+idNewSomething);
}
Service:
public int saveSomething(SomethingDTO something) {
Something noviSomething = new Something();
noviSomething.setSomething(something.getSomething());
try {
Something s = sr.save(newSomething);
return s.getIdSomething();
} catch (Exception e) {
e.printStackTrace();
return -1;`enter code here`
}
}
}