接口开发之HelloWorld

接口开发实例

第一步,在com.jepcc.wiki目录下新建Pacakgecontroller

在这里插入图片描述

第二步,在Packagecontroller下新建类TestController

在这里插入图片描述

//TestContorller.java
package com.jepcc.wiki.controller;

public class TestContorller {
    public String hello(){
        return "Hello World!";
    }
}

第三步,添加注解,形成接口

  • @RequestMapping(url),支持HTTP请求的所有方法,如GETPOSTPUTDELETE
  • @GetMapping(url),仅支持HTTP GET方法
    @RequestMapping(value=url,method=RequestMthod.GET)
  • @PostMapping(url),仅支持HTTP POST方法
    @RequestMapping(value=url,method=RequestMthod.POST)
  • @PutMapping(url),仅支持HTTP PUT方法
    @RequestMapping(value=url,method=RequestMthod.PUT)
  • @DeleteMapping(url),仅支持HTTP DELETE方法
    @RequestMapping(value=url,method=RequestMthod.DELETE)
  • @RestController,接口返回字符串或者JSON对象
//WikiApplication.java
package com.jepcc.wiki;


import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.core.env.Environment;

@SpringBootApplication
public class {

	private static final Logger LOG = LoggerFactory.getLogger(WikiApplication.class);
	public static void main(String[] args){
		SpringApplication app = new SpringApplication(WikiApplication.class);
		Environment env = app.run(args).getEnvironment();
		LOG.info("启动成功!");
		LOG.info("地址:\t http://127.0.0.1:{}",env.getProperty("server.port"));
	}
}
//TestController.java
package com.jepcc.wiki.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class TestContorller {
    @RequestMapping("/hello")
    public String hello(){
        return "Hello World!";
    }
}

启动项目,打开浏览器输入地址localhost:8000/hello,浏览器页面显示Hello World!
在这里插入图片描述

注解

接下来,我们着重了解下注解。

RestController、Controller、ResponseBody

按住Ctrl且鼠标悬停至注解@RestController,可单击进入该注解所在类。
在这里插入图片描述

//RestController.class
package org.springframework.web.bind.annotation;

@java.lang.annotation.Target({java.lang.annotation.ElementType.TYPE})
@java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME)
@java.lang.annotation.Documented
@org.springframework.stereotype.Controller
@org.springframework.web.bind.annotation.ResponseBody
public @interface RestController {
    @org.springframework.core.annotation.AliasFor(annotation = org.springframework.stereotype.Controller.class)
    java.lang.String value() default "";
}

RestController.class中,我们可以看到@ControllerResponseBody这两个注解,其中@Controller用来返回页面,@ResponseBody用来返回字符串或者JSON对象。

SpringBootApplication、ComponentScan

我们再来看看@SpringBootApplication这个注解,在SpringBootApplication.class里,可以看到@ComponentScan()这么一个注解,表示会扫描SpringBootApplication这个注解所在的类所在包下的所有子包。

//SpringBootApplication.class
package org.springframework.boot.autoconfigure;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.springframework.beans.factory.support.BeanNameGenerator;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.boot.context.TypeExcludeFilter;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.FilterType;
import org.springframework.context.annotation.ComponentScan.Filter;
import org.springframework.core.annotation.AliasFor;

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(
    excludeFilters = {@Filter(
    type = FilterType.CUSTOM,
    classes = {TypeExcludeFilter.class}
), @Filter(
    type = FilterType.CUSTOM,
    classes = {AutoConfigurationExcludeFilter.class}
)}
)
public @interface SpringBootApplication {
    @AliasFor(
        annotation = EnableAutoConfiguration.class
    )
    Class<?>[] exclude() default {};

    @AliasFor(
        annotation = EnableAutoConfiguration.class
    )
    String[] excludeName() default {};

    @AliasFor(
        annotation = ComponentScan.class,
        attribute = "basePackages"
    )
    String[] scanBasePackages() default {};

    @AliasFor(
        annotation = ComponentScan.class,
        attribute = "basePackageClasses"
    )
    Class<?>[] scanBasePackageClasses() default {};

    @AliasFor(
        annotation = ComponentScan.class,
        attribute = "nameGenerator"
    )
    Class<? extends BeanNameGenerator> nameGenerator() default BeanNameGenerator.class;

    @AliasFor(
        annotation = Configuration.class
    )
    boolean proxyBeanMethods() default true;
}

现在不妨将试试将WikiApplicationTestController这两个类放在两个不同的包下,看看会发生什么。
在这里插入图片描述
瞧,访问localhost://8000/hello,接口返回404
怎么破?
WikiApplication这个类里添加@ComponentScan("com.jepcc.wiki")即可。
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值