spring-nc — это расширение Spring MVC, которое автоматически генерирует контроллеры на основе интерфейсов сервисов и внедряет реализацию этих интерфейсов в контроллер.
Автоматически созданные контроллеры ничем не отличаются от обычных контроллеров, за исключением того, что они создаются автоматически. Для этого достаточно применить аннотации типа @Controller
, @RequestMapping
и т.д. к интерфейсу, что значительно упрощает процесс разработки. При этом автоматически созданные контроллеры могут сосуществовать с обычными контроллерами.
Кроме того, spring-nc предоставляет возможность автоматического маппинга методов. Для этого следует использовать аннотацию @AutoController
на интерфейсе. Это позволяет обращаться к методам сервиса через URL вида /интерфейс/метод
.
github: https://github.com/xiwasong/spring-nc
oschina: http://git.oschina.net/xiwa/spring-nc
qq группа: 233391281
Определите интерфейс сервиса и примите необходимые аннотации контроллера, как обычно.
package cn.hn.java.summer.springnctest.service;
import cn.hn.java.summer.springnc.annotation.GetMapping;
import cn.hn.java.summer.springnc.annotation.RequestMapping;
import cn.hn.java.summer.springnc.annotation.RestController;
import cn.hn.java.summer.springnctest.bean.User;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.ResponseBody;
/**
* Created by xw2sy on July 15, 2017.
*/
@RestController
@RequestMapping("/")
public interface IHello {
``````markdown
# 1. Конфигурация контроллеров:
```java
package cn.hn.java.summer.springnctest.controller;
import cn.hn.java.summer.springnctest.bean.User;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/say")
public class HelloController {
@GetMapping
public String say(@RequestBody User user) {
System.out.println(user.getName());
return "привет " + user.getName();
}
@GetMapping("/say2")
public String say2(@RequestParam String name, @RequestParam int age) {
return "имя:" + name + " возраст:" + age;
}
@GetMapping("/info/{id}")
public String info(@PathVariable("id") String id) {
return "информация id:" + id;
}
}
package cn.hn.java.summer.springnctest.service;
import cn.hn.java.summer.springnctest.bean.User;
import org.springframework.stereotype.Service;
@Service
public class HelloService implements IHello {
@Override
public String say(User user) {
System.out.println(user.getName());
return "привет " + user.getName();
}
@Override
public String say2(String name, int age) {
return "имя:" + name + " возраст:" + age;
}
@Override
public String say2(String name) {
return "имя:" + name;
}
@Override
public String info(String id) {
return "информация id:" + id;
}
}
@EnableNoController
в классе запуска приложения:package cn.hn.java.summer.springnctest;
import cn.hn.java.summer.springnc.AutoControllerApplication;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableNoController;
@SpringBootApplication(scanBasePackages = "cn.hn.java.summer.springnctest.service")
@EnableNoController
public class Application {
}
SpringApplication.run(Application.class, args);
}
}
Вы можете создать его вручную, если вы не используете Spring Boot:
<bean class="cn.hn.java.summer.springnc.NoControllerConfig">
<property name="scanBasePackages" value="cn.hn.java.summer.springnctest"/>
</bean>
вывод: привет мир
Поддержка автоматического отображения, как показано ниже, применяется аннотация @AutoController
к интерфейсу, соответствующие методы интерфейса будут отображены на /IAutoMapping/метод
.
Если есть методы, которые вы не хотите автоматически отображать, вы можете использовать аннотацию @ExcludeMapping
для исключения этих методов.
Конечно, вы также можете смешивать использование других аннотаций отображения, таких как @RequestMapping
.
package service;
import cn.hn.java.summer.springnc.annotation.AutoController;
import cn.hn.java.summer.springnc.annotation.ExcludeMapping;
import cn.hn.java.summer.springnc.annotation.RequestMapping;
/**
* Created by xw2sy on July 17, 2017.
*/
@AutoController
public interface IAutoMapping {
//отображается на "/one"
String one();
}```markdown
отображение результат:
```java
2017-07-19 02:39:43.311 INFO 6296 --- [ главная] s.w.s.m.m.a.RequestMappingHandlerMapping : Отображено "{[/IAutoMapping/one]}" на метод public java.lang.String service.IAutoMappingController.one()
2017-07-19 02:39:43.311 INFO 6296 --- [ главная] s.w.s.m.m.a.RequestMappingHandlerMapping : Отображено "{[/IAutoMapping/imFour]}" на метод public java.lang.String service.IAutoMappingController.four()
2017-07-19 02:39:43.311 INFO 6296 --- [ главная] s.w.s.m.m.a.RequestMappingHandlerMapping : Отображено "{[/IAutoMapping/three]}" на метод public java.lang.String service.IAutoMappingController.three(java.lang.String)
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )