控制器或RestController

问题描述 投票:0回答:2

我是 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";
    }
}
spring spring-mvc spring-boot
2个回答
2
投票

@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";
    }
}

0
投票
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`
        }   
    }

}

© www.soinside.com 2019 - 2024. All rights reserved.